mysql根據不同條件統計後合併顯示

2021-09-28 18:34:08 字數 1157 閱讀 6936

記錄下開發中遇到的事情,假設有如下表test:

idnum

time

1123

2019-01-01 11:11:11

2666

2019-01-01 11:11:11

需要統計time小於等於某月份的num總數,以及time等於月份num數。

一開始的想法是使用子查詢:

select

sum( a.num ) as allsum,

( select sum( b.num ) from test b where date_format( b.time, '%y%m' ) = '201901' ) as monthsum

from

test a

where

date_format( a.time, '%y%m' ) <= '201901'

這樣需要全表掃瞄2次,效率非常差。

於是改用case when,如下:

select

sum( case when date_format( a.time, '%y%m' ) <= '201901' then num else 0 end ) as allsum,

sum( case when date_format( a.time, '%y%m' ) = '201901' then num else 0 end ) as monthsum

from

test a

只需要全表掃瞄1次。

ps.需求需要返回 [總數,本月數] 格式的字串,原本想在sql中使用concat拼接,如:

select

concat(

'【',

sum( case when date_format( a.time, '%y%m' ) <= '201901' then num else 0 end ),

',',

sum( case when date_format( a.time, '%y%m' ) = '201901' then num else 0 end ),

'】'

) as `result`

from

test a

發現查詢效率變差,只好改為在程式中拼接了。

DataTemplate 根據條件選擇不同模板

msdn datatemplate 為了不同的條件選擇模板,可以實現乙個datatemplateselector。1 模板選擇器是繼承自datatemplateselector,並重寫了selecttemplate方法並返回所需要的模板的類 public class persontemplatese...

mysql根據不同狀態統計出現的次數

mysql根據不同狀態統計使用者出現的次數 情況如下圖表示 我感覺這個需求是乙個很經典的題 考察了mysql的聚合函式count 和sum使用 還有邏輯思維 下面是具體的sql查詢 case when 的使用 select userid,sum case when status 1 then 1 e...

MySQL兩表聯查,根據不同條件獲得不同資料

查詢語句 select distinct ifnull select sum 列名 from a,b where a.id b.id and a.condition condition1 and b.condition condition2 0 as 條件1下的資料 ifnull select su...