今天看到了這個文章感覺內容挺多的,就是比較亂,實在不好整理,武林網小編就簡單整理了一下,希望大家能湊合看吧
分組后分組合計以及總計SQL語句
1)想一次性得到分組合計以及總計,sql:
SELECT 分組字段 FROM 表
GROUP BY 分組字段compute sum(COUNT(*))
2)分組合計1:
SELECT COUNT(*)FROM (SELECT 分組字段 FROM 表GROUP BY 分組字段)別名
3)分組合計2:
SELECT COUNT(*)FROM (SELECT distinct 分組字段 FROM 表)別名
4)統計分組后的種類數:
例子1:分組合計
SELECT JSSKQK_JGH FROM SJ_JSSKQK WHERE JSSKQK_JGH IN (SELECT JSJBXX_JGH FROM SJ_JSJBXX WHERE JSJBXX_JSLXM1=1) GROUP BY JSSKQK_JGH HAVING ((SUM(JSSKQK_SSKCXS1) /40)>5)
上面的語句已經可以滿足要求分組了.假設執行后有3條記錄,怎么才能把這個COUNT值求出?
select count(*) from( SELECT JSSKQK_JGH FROM SJ_JSSKQK WHERE JSSKQK_JGH IN (SELECT JSJBXX_JGH FROM SJ_JSJBXX WHERE JSJBXX_JSLXM1=1) GROUP BY JSSKQK_JGH HAVING ((SUM(JSSKQK_SSKCXS1) /40)>5) ) t
例子2:[PL/SQL] 如何得到分組后,組中最大日期的紀錄
TABLE:A
A B C D
1 2001/01/01 1 1
1 2001/12/12 2 2
3 2002/01/01 3 3
3 2003/12/12 4 4
按列A分組,請問如何得到每組中時間最大的數據?
1 2001/12/12 2 2
3 2003/12/12 4 4
我的笨方法:
SELECT *FROM AWHERE (A,B) IN(SELECT A,MAX(B)FROM AGROUP BY A)
有更好的方法嗎?
1,select * from a out
where b = (select max(b) from a in
where in.a = out.a)
2,Select * from
(select a, row_number() over (partition by a
order by b desc) rn
from a)
where rn=1
3,Select a, b,c,d from
(select a, b,c,d,row_number() over (partition by a
order by b desc) rn
from a)
where rn=1
4,select A,B,C,D from test
where rowid in
(
select rd from
(
select rowid rd ,rank() over(partion A order by B desc)rk from test
) where rk=1
)
)
例子3:SQL語句分組獲取記錄的第一條數據的方法
使用Northwind 數據庫
首先查詢Employees表
查詢結果:

city列里面只有5個城市
使用ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2) 先進行分組 注:根據COL1分組,在分組內部根據 COL2排序,而此函數計算的值就表示每組內部排序后的順序編號(組內連續的唯一的).
sql語句為:
select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,City,ROW_NUMBER() over(partition by City order by EmployeeID) as new_index
from Employees
執行結果圖:

可以看到是按照City分組,EmployeeID排序。
select出分組中的第一條記錄
執行語句:
select * from
(select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,City,ROW_NUMBER() over(partition by City order by EmployeeID) as new_index
from Employees) a where a.new_index=1
執行結果圖:

例子4:sql 獲取分組結果后,如何每一組的第一條記錄
Eric red 20
eric blue 30
andy red 10
andy blue 5
例如,只獲取黑體的記錄。
1,declare @fTable table (fName varchar(10), fColor varchar(10), fOrder int)
insert into @fTable values('Eric', 'red', 20)
insert into @fTable values('eric', 'blue', 30)
insert into @fTable values('andy', 'red', 10)
insert into @fTable values('andy', 'blue', 5)
-- 只獲取紅色
select * from @fTable where fColor = 'red'
-- 每個 fColor 取一條記錄(按 fOrder 正序)
select * from @fTable A where fName = (select top 1 fName from @fTable where fColor = A.fColor order by fOrder )
-- 每個 fColor 取一條記錄(按 fOrder 反序)
select * from @fTable A where fName = (select top 1 fName from @fTable where fColor = A.fColor order by fOrder desc)
2,SQL2005以上版本
select * from (select *,row=row_number()over(partition by Color order by Color) from table1)t where row=1 and color='xx'--加上
主站蜘蛛池模板:
京山县|
安徽省|
巍山|
克拉玛依市|
鄄城县|
香河县|
客服|
丹寨县|
平遥县|
区。|
盐山县|
平罗县|
贵州省|
营口市|
濉溪县|
池州市|
溧阳市|
铁岭市|
元谋县|
吉首市|
图们市|
任丘市|
都匀市|
霍城县|
旺苍县|
苍南县|
新津县|
广河县|
凤阳县|
大田县|
柳州市|
白河县|
永登县|
荆门市|
宁国市|
海南省|
灌云县|
汝南县|
武威市|
怀集县|
巩留县|