如果重复,请按两列排序

时间:2014-10-15 22:14:13

标签: mysql sql sql-server

我有一个简单的查询:

create table #Test
(
    ID  INT,
    name VARCHAR(100),
    num INT
)

INSERT INTO #Test VALUES(1,'bob', 98)
INSERT INTO #Test VALUES(2,'bob', 44)
INSERT INTO #Test VALUES(3,'sam', 60)
INSERT INTO #Test VALUES(4,'deacon', 14)
INSERT INTO #Test VALUES(5,'toby', 99)
INSERT INTO #Test VALUES(6,'toby', 12)

SELECT * FROM #Test ORDER BY num DESC, name DESC

DROP TABLE #Test

输出:

ID  name    num
5   toby    99
1   bob     98
3   sam     60
2   bob     44
4   deacon  14
6   toby    12

我想要做的是首先按num BUT对数据进行排序,如果有重复的名称,我希望名字跟随彼此,无论数字是什么。

我正在寻找的输出是:

ID   name    num
5     toby    99
6     toby    12
1     bob     98
2     bob     44
3     sam     60
4     deacon  14

我的订单有问题,任何帮助都会受到赞赏

3 个答案:

答案 0 :(得分:1)

试试这个:

SELECT
  t.ID,
  t.name,
  t.num
FROM
  #Test t
ORDER BY
  (
   SELECT
     MAX(t2.num)
   FROM
     #test t2
   WHERE
     t2.NAME = t.name
   GROUP BY
     t2.NAME
  ) DESC

答案 1 :(得分:0)

你不会得到你期望的输出,因为它不是字母,但我认为这正是你要找的。 (在订购方式中交换名称 num

create table #Test
(
    ID  INT,
    name VARCHAR(100),
    num INT
)

INSERT INTO #Test VALUES(1,'bob', 98)
INSERT INTO #Test VALUES(2,'bob', 44)
INSERT INTO #Test VALUES(3,'sam', 60)
INSERT INTO #Test VALUES(4,'deacon', 14)
INSERT INTO #Test VALUES(5,'toby', 99)
INSERT INTO #Test VALUES(6,'toby', 12)

SELECT * FROM #Test ORDER BY name DESC, num DESC

DROP TABLE #Test

答案 2 :(得分:0)

首先获取最高分的名称。我们使用子查询执行此操作。

然后使用该子查询,获取具有最高名称的顺序,然后按名称排序,然后按num

select * from
 (
select name as cname,max(num) as num from test
group by name, order by max(num) num desc
) as x
order by cname desc, num desc