my sql篩選語法錯誤
表格:
---------國文----數學----英文
王小明----80------70------60
王小明----70------60------50
王小明----60------80------80
陳小明----80------60------70
陳小明----60------70------80
林小明----80------80------90
有重複名字的話,以"數學"高分來篩選
之後篩選結果如下
王小明----60------80------80
陳小明----60------70------80
林小明----80------80------90
6筆篩選剩3筆
現在語法...有錯誤,之前也發問過一次,好像也不能...
高分. SELECT * FROM(SELECT * FROM A order by math ASC) tmp GROUP BY name HAVING count(*)>=1
低分. SELECT * FROM(SELECT * FROM A order by math DESC) tmp GROUP BY name HAVING count(*)>=1
請大哥大姐幫解惑
謝謝
湯包哥,已經有另一種寫法了"select A.* from A,(select name,max(math) as math from A group by name) B where A.name=B.name and A.math=B.math"
這寫法雖然有點複雜...不過可以成功,現在我想再加個條件and國文高分,卡住了
題目意思是
現在我要多加一個條件,就是取數學高分跟英文高分
如果兩個條件沒達成,就篩選掉
直到兩個都有高分就選那筆
1 個解答
- 湯包Lv 71 0 年前最佳解答
我的想法是應該先使用排序函數
以姓名為群組 依分數高低給個排序號碼
SELECT *, ROW_NUMBER() OVER (PARTITION BY name
ORDER BY math DESC) AS sort
FROM table
結果如下:
-----------國文---數學---英文---排序
王小明----80------70------60------2
王小明----70------60------50------3
王小明----60------80------80------1
陳小明----80------60------70------2
陳小明----60------70------80------1
林小明----80------80------90------1
之後再挑選出排序為1的資料即可....
SELECT name, chinese, math, english
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY name
ORDER BY math DESC) AS sort
FROM table) AS a
WHERE sort=1
想取數學最低分的
將 DESC 改為 ACS 即可....
2009-11-16 18:49:23 補充:
不懂您的條件是什麼....
如果有筆記錄是數學 80 英文 90
另一筆是數學 90 英文 80
您想要篩選哪筆記錄....@.@