① 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個類似函數:
row_number() over
這個函數不需要考慮是否並列,哪怕根據條件查詢出來的數值相同也會進行連續排名。也是最常用的函數,排序結果類似於1,2,3,4,5
rank() over
查出指定條件後進行一個排名,但是有一個特點。假如是對學生排名,那麼實用這個函數,成績相同的兩名是並列。排序結果類似於1,2,2,4,5
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