5

我正在寻找通过 sql 查询对我的 sql 结果进行排序,大概是 order by 子句中的某种嵌套 order by/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 之后并按 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

感谢您的任何建议。

4

2 回答 2

3
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

工作演示

或具有相同结果的另一种解决方案(我认为它具有更好的性能,但您需要对此进行一些测试):

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;

演示

于 2013-08-24T03:37:47.207 回答
-2

选择 USER、ITEM_NO、SCORE from 'TABLE' order by 2, 3;

-- 2 是 USER 列,3 是 ITEM_NO 列

于 2020-05-08T13:16:34.673 回答