国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

分組后分組合計以及總計SQL語句(稍微整理了一下)

2020-07-25 12:41:34
字體:
來源:轉載
供稿:網友

今天看到了這個文章感覺內容挺多的,就是比較亂,實在不好整理,武林網小編就簡單整理了一下,希望大家能湊合看吧

分組后分組合計以及總計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'--加上

主站蜘蛛池模板: 京山县| 安徽省| 巍山| 克拉玛依市| 鄄城县| 香河县| 客服| 丹寨县| 平遥县| 区。| 盐山县| 平罗县| 贵州省| 营口市| 濉溪县| 池州市| 溧阳市| 铁岭市| 元谋县| 吉首市| 图们市| 任丘市| 都匀市| 霍城县| 旺苍县| 苍南县| 新津县| 广河县| 凤阳县| 大田县| 柳州市| 白河县| 永登县| 荆门市| 宁国市| 海南省| 灌云县| 汝南县| 武威市| 怀集县| 巩留县|