當前位置:首頁 » 編程語言 » sql分組取出
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql分組取出

發布時間: 2023-03-10 12:19:01

sql取出每個分組的前幾條

一個簡單的方法就是排序之後給它分配序號,根據序號去找前幾條

select*

from(select公司,人數,

--按人數從多到少分配序號,不同公司會重1開始

rank()over(partitionby公司orderby人數desc)asxh

from公司檔案)asA

wherexh<=2--取前幾位就寫幾

orderby公司,人數desc

排序效果如下

② sql 取分組 最小值

select USERTYPE from CONFIG_USER group by USERTYPE ORDER BY USERTYPE DESC
先分組再排序 取第一個就行了

③ SQL分組查詢取第一條數據

我們在查詢數據時,經常會使用distinct去重,但使用distinct只能去除所有查詢列都相同的記錄,如果所查詢列中有一個欄位值不同,distinct是無法去重的。但我們還想要實現這樣的效果,這時我們可以用partition by。

1.例如,我們新建一張學生成績表。

2.插入一些測試數據。

3.例如我們需要查詢每個科目不同的分數,這時候可以用到distinct:

4.但是我們把需求再加一點,需要查詢每個科目排名第一的學生信息,這時候就需要用到partition by:

PS:MySQL5.6不支持partition by
此時我們發現,並且第一的小明同學的英語成績沒有被查詢出來,接著優化:

④ 請教一個sql(按2個欄位分組然後從每組取出最大的一條紀錄,再根據一個標記為判斷是否取出該值)

CREATETABLE#test(
idINT,
[number]varchar(6),
deptvarchar(6),
[date]int,
flagint
);
GO

INSERTINTO#test
SELECT1,'001','aa',20130201,1UNIONALL
SELECT2,'001','aa',20120801,0UNIONALL
SELECT3,'001','bb',20130403,1UNIONALL
SELECT4,'001','bb',20120404,0UNIONALL
SELECT5,'001','cc',20120604,0UNIONALL
SELECT6,'002','aa',20130201,1UNIONALL
SELECT7,'002','aa',20120801,0UNIONALL
SELECT8,'002','bb',20130403,1UNIONALL
SELECT9,'002','bb',20120404,0UNIONALL
SELECT10,'002','cc',20120604,1
GOSELECT
main.*
FROM
#testmain
WHERE
NOTEXISTS(
SELECT1
FROM#testsub
WHEREmain.[number]=sub.[number]ANDmain.[dept]=sub.[dept]ANDmain.[id]>sub.[id]
);
GO

idnumberdeptdateflag
---------------------------------------------
1001aa201302011
3001bb201304031
5001cc201206040
6002aa201302011
8002bb201304031
10002cc201206041

(6行受影響)


WithMyCTEAS(
SELECT
main.*
FROM
#testmain
WHERE
NOTEXISTS(
SELECT1
FROM#testsub
WHEREmain.[number]=sub.[number]ANDmain.[dept]=sub.[dept]ANDmain.[id]>sub.[id]
)
)
SELECT
[number],MAX([date])ASdate
FROM
MyCTE
GROUPBY
[number]
HAVING
SUM(CASEWHENflag=1THEN1ELSE0END)=COUNT(flag);
GO

numberdate
-----------------
00220130403

(1行受影響)

⑤ sql語句 如何分組後得到記錄總數

SELECT COUNT(*)

FROM (SELECT 分組欄位 FROM 表

GROUP BY 分組欄位

)別名


或者

SELECT COUNT(*)

FROM (SELECT distinct 分組欄位 FROM 表)別名

(5)sql分組取出擴展閱讀:

SQL分組查詢

在SQL Server中使用的分組查詢是ORDER BY子句,使用ORDER BY子句要同聚合函數配合使用才能完成分組查詢,在SELECT查詢的欄位中如果欄位沒有使用聚合函數就必須出現在ORDER BY子句中(即SELECT後邊的欄位名要麼出現在聚合函數中,要麼在ORDER BY子句中使用)

在分組查詢中還可以配合使用HAVING子句,定義查詢條件。

使用group by進行分組查詢

在使用group by關鍵字時,在select列表中可以指定的項目是有限制的,select語句中僅許以下幾項:

1、被分組的列

2、為每個分組返回一個值得表達式,例如用一個列名作為參數的聚合函數

3、group by 有一個原則,就是 select 後面的所有列中,沒有使用聚合函數的列,必須出現在 group by 後面

⑥ SQL查詢取分組最大值

selectt1.分類,t1.商品名稱,table.庫存,t1.更新時間

from (

select 分類,商品名稱,max(更新時間) 更新時間 from table

group by 分類,商品名稱

) t1

inner join table on t1.分類=table.分類 and t1.商品名稱=table.商品名稱 and t1.更新時間

=table.更新時間

(6)sql分組取出擴展閱讀:

關於SQL最大值查詢語句的記錄

SELECT

bsnum,

STATE AS FILE_STATE

FROM

FILE_RECORD r

WHERE

STATE =(

SELECT

MAX(STATE)

FROM

FILE_RECORD

WHERE

bsnum = r.bsnum

);

小技巧:有時需要測試sql語法但又覺得創建表麻煩,可以使用創建一個臨時表,如下:

select id, count(t.id) from

(

select 1 as id, 2 as age, 'F' as sex from al union

select 2 as id, 2 as age, 'M' as sex from al union

select 3 as id, 3 as age, 'F' as sex from al union

select 4 as id, 4 as age, 'M' as sex from al

)t