我希望通过一个sql查询对我的sql结果进行排序,可能是在order by子句中按顺序排序的某种嵌套顺序
我有以下数据:
TERM USER ITEM_NO SCORE
man sam 2 NULL
man sam 1 170
man jerry 1 100
man jerry 2 NULL
man sam 3 NULL
我希望获得以下结果的顺序:
TERM USER ITEM_NO SCORE
man sam 1 170
man sam 2 NULL
man sam 3 NULL
man jerry 1 100
man jerry 2 NULL
结果必须首先按分数(仅存储在每个用户的item_no 1中)降序排序.但是,该用户为选择的术语创建的任何其他项目也必须在item_no顺序之后直接选取并插入.
我当前的查询如下所示:
SELECT * FROM table WHERE term = 'man' ORDER BY SCORE DESC, ITEM_NO ASC
……但这只是结果如下:
TERM USER ITEM_NO SCORE
man sam 1 170
man jerry 1 100
man sam 2 NULL
man jerry 2 NULL
man sam 3 NULL
谢谢你的任何建议.
最佳答案
SELECT *,
(SELECT MAX(Score)
FROM TEST t2
WHERE t2.Term = t1.Term AND t2.User = t1.User GROUP BY t2.Term, t2. User) as max_score
FROM test t1
WHERE term = 'man'
ORDER BY max_score DESC, ITEM_NO ASC
工作DEMO
或者具有相同结果的另一个解决方案(我认为它具有更好的性能,但您需要对此进行一些测试):
SELECT t1.*
FROM test t1
JOIN
(SELECT t2.Term, t2.User, score FROM Test t2 WHERE t2.Item_No = 1) t3
ON t1.Term = t3.Term AND t1.User = t3.User
ORDER BY t3.score DESC, t1.Item_No;