一、有乙個這樣的需求,統計出在每個國家的銷量並排序,所得的結果應該包含國家、銷量、排名等字段。排序好辦,有乙個問題是如何新增排名這個字段,可以有如下幾種方式,
假設對銷量排序的結果是中間表temp,包括國家(delivery_country)、銷量(sale_count)兩個字段。
1、通過select子查詢的方式構造rank欄位
select
( select
count(*) from temp b where
b.sale_count > a.sale_count or
(b.sale_count = a.sale_count and
b.delivery_country > a.delivery_country)
)+1 as rank,
temp.*
from temp a
order by rank
2、使用者變數
set @rownum=0;
select t.*,@rownum := @
rownum +1 as rank from temp t
二、需求:統計某個時間段內,每個的資料,如果當月沒有資料則顯示為0。在實際操作中,按月分組統計資料的時候,只顯示有資料的時間,
沒有資料則不顯示,為了實現我們的需求,有一下幾種方法:
1、在統計的時候,外層巢狀迴圈對每個月彙總
sum(case when 月份=2017-11月 then sales_count else 0 end) neg_7,
sum(case when 月份=2017-12月 then sales_count else 0 end) neg_6,
sum(case when 月份=2018-01月 then sales_count else 0 end) neg_5,
sum(case when 月份=2018-02月 then sales_count else 0 end) neg_4,
sum(case when 月份=2018-03月 then sales_count else 0 end) neg_3,
2、可以找乙個資料庫中的表,設定使用者變數
select @num:=-1
select
@num:=@num+1,
date_format(adddate(concat('2017-11','-01'),
interval @num month),'%y-%m') as month
from customer_sta
where date_format(adddate(concat('2017-11','-01'),
interval @num month),'%y-%m') < date_format(curdate(),'%y-%m-%d')
order by month
如上所示的sql即取得從2023年11月開始到現在為止的所有月份。將其與我們的中間結果集進行關聯即可得。也可以將上述sql改寫成如下形式。
select
@num:=@num+1,date_format(adddate($concat_select,
interval @num month),'%y-%m') as month
from customer_sta,(select @num:=-1) t
where date_format(adddate($concat_select,
interval @num month),'%y-%m') < date_format(curdate(),'%y-%m-%d')
order by month
VC疑難問題彙總
error lnk2001 無法解析的外部符號 crtdbgreport 專案屬性 c c 生成 執行時庫 0x7c921230 處未處理的異常 使用者斷點 選擇繼續n 200 次以後可以繼續 debug版直接執行 release版都沒問題 lnk2001 無法解析的外部符號 argv 在共享dll...
MS SQL Server 疑難問題
有一表a id date name 1 2007 01 01 ccc 1 2007 01 01 ddd 1 2007 01 01 vv 1 2007 02 01 ttttt 2 2007 01 01 gg 3 2007 01 02 ccc 3 2007 01 01 ccc 4 2007 01 04 ...
python疑難問題
python的列表之間有關係嗎?group queue for in range 2 各組的子佇列 queue queue 組佇列,控制組與組之間的執行順序,因為每個組的專案要一起執行 group queue 6 5 for i in range len group queue print queu...