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

sql分組排序後取每組前三

發布時間: 2022-05-31 13:30:30

sql取出每個分組的前幾條

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

select*

from(select公司,人數,

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

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

from公司檔案)asA

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

orderby公司,人數desc

排序效果如下

② SQL怎麼取出每個科目前三名並按科目和分組排列

select B1.姓名,B1.科目,B1.分數 from B B1 where(select count(1) from B where 科目=B1.科目 and 分數〉=B1.分數)〈=3 order by B1.科目,B1.分數;

③ Mysql 分組以後取每組的前三名數據

Try this one,should be fine
下面這個已經有排序了哦,不行么?

SELECT uid, group_concat(subject)
FROM (SELECT id, uid, subject
FROM (SELECT id, uid, subject,
(SELECT COUNT(*)
FROM t_subject
WHERE uid = t.uid
AND subject <= t.subject) RK
FROM t_subject t) t1
WHERE rk <= 3) t2
GROUP BY uid

多了個a.原來
或者你直接用個substring()得了。。。

④ SQL語句 怎樣按排序後顯示前三個

沒有看到你的資料庫conn連接啊:
@$conn = mysql_connect("yourHost","yourUserID","yourPassword");

$sql=mysql_query("select top 3 title from art_title join art_neirong on art_title.no=art_neirong.no order by last_update DESC;",$conn);
//echo $sql;
$i=0;
while($result=mysql_fetch_array($sql))
{
echo "<h5>".$result['title']."</h5>;
}
mysql_close($conn);

⑤ sql 怎麼先分組再查詢每組中前三天數據

SELECT TEST1.STUDENTNAME, TEST1.SCORE, TEST1.CLASS
FROM (SELECT STUDENTNAME,
SCORE,
CLASS,
ROW_NUMBER() OVER(PARTITION BY CLASS ORDER BY CLASS, SCORE DESC) ROW_NUM
FROM TABLE_NAME) TEST1
WHERE TEST1.ROW_NUM <= 3
ORDER BY TEST1.CLASS, TEST1.STUDENTNAME
看看是不是你要的,這用到了分組排序編號

⑥ sql分組統計後分別顯示前幾條記錄

首先,該問題對應的SQL如下

select 采購類別,客戶,訂貨總額

from (select采購類別,客戶,訂貨總額,

row_number() over(partition by 采購類別 order by 訂貨總額 desc) rn

from table_name) a
where rn<=2

;

其次,常用資料庫比如Oracle和Sqlserver都有特定函數完成分組排序的功能,如果需要顯示並列的情況可以用下面另外的2個.

分別有3個類似函數:

  1. row_number() over

    這個函數不需要考慮是否並列,哪怕根據條件查詢出來的數值相同也會進行連續排名。也是最常用的函數,排序結果類似於1,2,3,4,5

  2. rank() over

    查出指定條件後進行一個排名,但是有一個特點。假如是對學生排名,那麼實用這個函數,成績相同的兩名是並列。排序結果類似於1,2,2,4,5

  3. dense_rank() over

    比較特殊,排序結果類似於1,2,2,3,4

⑦ SQL如何對分組後的結果進行排序並且取前幾名

SQL取分組中的前幾名

[sql] www.2cto.com
create table #aa(class varchar(10),name varchar(10),lang int,math int)
go

insert into #aa
select '1','a1',60,70
union all
select '1','a2',80,70
union all
select '1','a3',90,70
union all
select '1','a4',50,70
go

insert into #aa
select '2','b1',60,70
union all
select '2','b2',90,90
union all
select '2','b3',90,70
union all
select '2','b4',50,70

go

select * from #aa

--取每年級前一名的成級
select * from
(select ROW_NUMBER() over(partition by class order by lang+math desc) rr, * from #aa ) a
where rr<2
--取每年級前二名的成級
select * from
(select ROW_NUMBER() over(partition by class order by lang+math desc) rr, * from #aa ) a
where rr<3

⑧ 資料庫排序並且取每個分組的前三條

select
*
from
(
select
row_number()
over(partition
by
'分組'
order
by
'日期')
as
rownum
--
排序並分組
,
*
--
所需顯示的欄位
from

)
as
t
where
t.rownum
=
1
對每組的數據按日期排序並加上行號
取出時只取行號為1,也就是第一條數據。

⑨ MYSQL 中,如果提取分組排序後的第三條數據和前三條意外的所有數據

在select語句後面加上limit就行了。

LIMIT 子句可以被用於強制 SELECT 語句返回指定的記錄數。LIMIT 接受一個或兩個數字參數。參數必須是一個整數常量。如果給定兩個參數,第一個參數指定第一個返回記錄行的偏移量,第二個參數指定返回記錄行的最大數目。初始記錄行的偏移量是 0(而不是 1)。


如提取第三條記錄:

select*fromtestlimit1,1;

提取除了前三條以外的所有數據:

select*fromtestlimit2,-1,
--為了檢索從某一個偏移量到記錄集的結束所有的記錄行,可以指定第二個參數為-1:

⑩ mysql分組後,取每組的前3條數據(並且有順序)

不列出表結構及測試數據,只能這樣大概寫個思路了:

select a.*
from
(
select t1.*,(select count(*)+1 from 表 where 分組欄位=t1.分組欄位 and 排序欄位<t1.排序欄位) as group_id
from 表 t1
) a
where a.group_id<=3