做報表的時候經常會用到聚合函式,有時候可能需要在乙個查詢裡面寫多個count,只是count的條件不一樣。這種要怎麼寫呢?
我們可以用子查詢來做這樣的事:
select
count_1=(select count(*) from table1 where reference = 1),
count_2=(select count(*) from table1 where reference = 2)
如果需要分組統計,上面語句就有心無力了,於是我們這樣寫:
示例資料:
departments pk - deptid deptname
--------------------------
1 department 1
2 department 2
3 department 3
4 department 4
groups pk - groupdid deptid
--------------------------
1 1
2 1
3 3
4 4
5 2
6 3
7 1
8 3
inventory pk - itemid groupid
--------------------------
1 2
2 3
3 8
4 1
5 4
6 5
7 1
8 2
9 2
10 3
11 7
示例**:
得到結果:select d.deptid,
count(distinct g.groupid) as groups,
count(distinct i.itemid) as items
from departments d
left join groups g on g.deptid = d.deptid
left join items i on i.groupid = g.groupid
group by d.deptid
deptid groups items也許你希望在groups或items裡面沒有記錄則返回0,此時可以使用left outer join。----- ------ -----
1 3 6
2 1 1
3 3 3
4 1 1
在left outer join裡面寫子查詢也是可以的,我也經常這樣用。實際上上面的查詢如果還要在count的同時進行過濾則需要用到子查詢了。
select d.deptid,
g.count1 as groups
from departments d
left outer join (select deptid, count(distinct g.groupid) as count1 from groups where groupid > 2
group by deptid
) as g on g.deptid = d.deptid
在同乙個sql語句中寫不同條件的Count數量
其實有count很難實現 可以用sum 去實現它 例子如下 select xy,sum case when jw cljgh 1 then 1 else 0 end as 留級,sum case when jw cljgh 2 then 1 else 0 end as 復學 from xjgl,bj...
乙個關於累加工資的T SQL語句
今天在itpub看到乙個人問的語句問題 問題如下 table emp parent id emp id emp name total amout null 2 andrew 200 2 1 nancy 100 2 3 janet 120 3 4 michael 80 1 5 robert 50 每個...
在同乙個sql語句中,統計不同條件的Count數量
前幾天幫同事優化了個sql,原寫法使用多個子查詢這裡不再重現了,大家都遇到過這樣一種情況,在專案後期的維護中,修改別人的sql 超過30行的語句,多層子查詢,讀起來很坑,時間久的專案伴隨著人員的流通,你可能就不知道原作者寫這一堆的sql是幹什麼用的,當然碰到部分有注釋習慣的朋友還是好點的,過長的sq...