Koo*_*bin 1 mysql sql t-sql sql-server plsql
我在这里根据类别获取记录.
我的表foo有字段[id,name,class].我的记录可以像:
1, ram, 10
2, hari, 9
3, sita, 10
4, gita, 9
5, rita, 5
6, tina, 7
8, nita, 8
9, bita, 5
10,seta, 7
Run Code Online (Sandbox Code Playgroud)
...和更多...
现在我想得到来自不同类的每条记录的结果..即类似的东西
1, ram, 10
2, hari, 9
5, rita, 5
6, tina, 7
8, nita, 8
Run Code Online (Sandbox Code Playgroud)
即按班级排名前1位
对于SQL Server 2005+和Oracle 9i +,请使用分析函数:
WITH summary AS (
SELECT f.id,
f.name,
f.class,
ROW_NUMBER() OVER (PARTITION BY f.class
ORDER BY f.name) AS rank
FROM FOO f)
SELECT s.id,
s.name,
s.class
FROM summary s
WHERE s.rank = 1
Run Code Online (Sandbox Code Playgroud)
这也使用公用表表达式(CTE),在Oracle中称为子查询因子...
MySQL没有分析功能支持,所以你必须使用:
SELECT x.id,
x.name,
x.class
FROM (SELECT f.id,
f.name,
f.class,
CASE
WHEN @class = f.class THEN @rownum := @rownum + 1
ELSE @rownum := 1
END AS rank,
@class := f.class
FROM FOO f
JOIN (SELECT @rownum := 0, @class := '') r
ORDER BY f.class, f.name) x
WHERE x.rank = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5938 次 |
| 最近记录: |