在SQL中按顺序按顺序排列顺序/顺序

时间:2013-08-24 03:27:11

标签: sql

我希望通过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

感谢您提出任何建议。

2 个答案:

答案 0 :(得分:2)

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;

DEMO

答案 1 :(得分:-2)

从“表”顺序中按2、3选择USER,ITEM_NO,SCORE;

-2是USER列,3是ITEM_NO列