統計報表SQL書寫記錄 --MySql echarts

 


 

 今天正在爲一個快上線的項目修改bug,一個同事過來告訴我首頁還有我的報表接口沒提供(首頁當時是一個js寫死的假數據),我口頭答應說一會就好,然後就繼續改我的bug,心裏想着雖然之前很少寫報表,但是這個語句很好寫,加上echarts渲染一哈半個多小時搞定。

先看一下效果大概是這樣的:

紫色綠色藍色從左到右的條條就用 A B C代替吧

分析一下,我是打算用一個sql查詢出來,要查出來之前的12個月份,月份裏的A、B、C類型的收入量,

一行顯示出來,用的是mysql數據庫,那樣的話我就需要:

1. 日期函數,把日期分成12個月做輸出項

2.sum函數,case when集合語句,把A、B、C分別加起來

大概就是這些吧,語句是這樣的:

 

<!-- 備用 -->

<select id="getBillStatisticsTmpTmp" parameterType="java.lang.String" resultType="java.util.Map">

SELECT

sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth',

sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnothIDC',

sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnothCDN',

sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnothyunComputing',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth1',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth1IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth1CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth1yunComputing',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth2',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth2IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth2CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth2yunComputing',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth3',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth3IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth3CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth3yunComputing',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth4',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth4IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth4CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth4yunComputing',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth5',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth5IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth5CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth5yunComputing',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth6',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth6IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth6CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth6yunComputing',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth7',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth7IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth7CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth7yunComputing',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth8',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth8IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth8CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth8yunComputing',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth9',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth9IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth9CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth9yunComputing',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth10',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth10IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth10CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth10yunComputing',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth11',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth11IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth11CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth11yunComputing'

FROM

billing_bill b

<where>

<if test='custId!=null and custId != ""'>

and b.cust_id = #{custId}

</if> 

</where>

</select>
 

 

這樣就是查詢結果是一行的。好,開始寫前端,因爲沒有細緻看前端是怎麼渲染的,發現該語句並不適合渲染前端。

前端是這樣的:

 

<script>

 .........

 xAxis: [
        {
            type: "category",
            axisLine: {
                onZero: false
            },
            data: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]
        }
    ],
    yAxis: [
        {
            type: "value",
            name: "收入/千萬元",
            axisTick: {
                lineStyle: {
                    color: "#333"
                },
                show: false,
                length: 0,
                interval: 100
            },
            nameLocation: "end",
            position: "left",
            max: 12,
            min: 0
        },
        {
            type: "value",
            name: "增量",
            min: -300,
            max: 150
        }
    ],
    series: [
        {
            name: "A",
            type: "bar",
            data: [2.6, 5.9, 9, 4, 5, 9, 8, 6, 3, 2, 6, 2.3]
        },
        {
            name: "B",
            type: "bar",
            data: [2.6, 5.9, 9, 4, 5, 9, 8, 6, 3, 2, 6, 2.3],
            xAxisIndex: 0
        },
        {
            type: "bar",
            name: "C",
            data: [2, 4.9, 7, 3, 3, 5, 7, 8, 7, 5, 6.4, 3.3]
        }
    ],

 .........

</script>
 

 

發現了事情並不是這麼簡單,重新分析一下, data: [2, 4.9, 7, 3, 3, 5, 7, 8, 7, 5, 6.4, 3.3]這種類型,

應該是sql查出來是列表,再做循環比較好,前臺明顯是一個foreach循環把ABC對應的data [] 渲染出來更好呀。

分析過後得出,查詢出來的是列表更加適合渲染,這就需要我去對查詢出來的數據再改結構,或者還有一個辦法,

去修改調用echarts的js,( 後端程序猿思索了一會,改echarts還是算了吧 ) 感覺還是重寫sql更快一些,重新寫後:

 

 

<!-- 提供用於首頁的統計  -->

<select id="getBillStatisticsTmp" parameterType="java.lang.String" resultType="java.util.Map">

SELECT

DATE_FORMAT(CURRENT_DATE(), '%m') curr,

sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id THENb.fee ELSE 0 END) 'month',

sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'monthIDC',

sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'monthCDN',

sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'monthYUN'

from billing_bill b 

UNION

SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%m'),

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month1',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month1IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month1CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month1yunComputing'

from billing_bill b 

UNION

SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%m'),

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month2',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month2IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month2CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month2yunComputing'

from billing_bill b 

UNION

SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%m'),

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month3',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month3IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month3CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month3yunComputing'

from billing_bill b 

UNION

SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%m'),

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month4',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month4IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month4CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month4yunComputing'

from billing_bill b 

UNION

SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%m'),

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month5',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month5IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month5CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month5yunComputing'

from billing_bill b 

UNION 

SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%m'),

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month6',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month6IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month6CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month6yunComputing'

from billing_bill b 

UNION

SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%m'),

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month7',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month7IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month7CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month7yunComputing'

from billing_bill b 

UNION

SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%m'),

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month8',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month8IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month8CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month8yunComputing'

from billing_bill b 

UNION

SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%m'),

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month9',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month9IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month9CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month9yunComputing'

from billing_bill b 

UNION

SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%m'),

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month10',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month10IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month10CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month10yunComputing'

from billing_bill b 

UNION

SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%m'),

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month11',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month11IDC',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month11CDN',

sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month11yunComputing'

FROM

billing_bill b

</select>
 

 

這樣就對了,結果:

 

 記錄一下寫統計報表的思路,第一就是先觀察前端哪些字段是需要後臺查出來的,再就是判斷拿到

的數據形式要適合前端渲染,大部分的條形柱狀報表就是這樣吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章