記錄下開發中遇到的事情,假設有如下表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...