按组优先顺序排序?

时间:2013-03-05 23:16:20

标签: mysql group-by

示例表:

NAME, PRIORITY, SORT
TEST1, 0, 11:10
TEST2, 1, 11:15
TEST3, 0, 11:20
TEST4, 1, 11:30

我想通过订购priority来制作以下优先列表:

TEST2 (first submitted with priority)
TEST1
TEST3
TEST4

怎么做?我试过GROUP BY等等,但没有成功!

3 个答案:

答案 0 :(得分:3)

请试一试。

  SELECT NAME 
    FROM table
   WHERE PRIORITY = 1
ORDER BY TIME ASC
   LIMIT 1
UNION 
  SELECT NAME 
    FROM table
ORDER BY TIME ASC

应该给出

TEST2 (first submitted with priority) TEST1 TEST3 TEST4

编辑忘记优先级

答案 1 :(得分:2)

根据http://blog.sqlauthority.com/2012/10/30/sql-server-union-all-and-order-by-how-to-order-table-separately-while-using-union-all/,你不能在工会的对立面有两个单独的命令。但你可以做的是添加一个新列并按该列排序。

该网站建议类似(虽然这是针对sql server,我不知道mysql是否使用相同的语法)

Select name, priority, sort, '1' OrderKey from table where priority = 1 and sort <= (select min(t3.sort) from table t3 where t3.priority = 1)
union
select name, priority, sort, '2' OrderKey from table
order by OrderKey, time asc

同样,这适用于sql server但不确定它是否适用于mysql。

编辑:修复查询(希望......)

答案 2 :(得分:0)

CREATE TABLE `name_priority_sort` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(31) DEFAULT NULL,
  `priority` int(11) DEFAULT NULL,
  `sort` time DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

INSERT INTO `name_priority_sort` (`id`, `name`, `priority`, `sort`)
VALUES
    (1,'Test1',0,'11:10:00'),
    (2,'Test2',1,'11:15:00'),
    (3,'Test3',0,'11:20:00'),
    (4,'Test4',1,'11:30:00');

select `name`, priority, sort from (
    select 1 `set`, `name`, priority, min(sort) sort from `name_priority_sort` where priority = 1
    union all
    select 2 `set`, `name`, priority, sort from `name_priority_sort` where `name` not in (
        select `name` from (
            select `name`, priority, min(sort) sort from `name_priority_sort` where priority = 1
        ) first_set
    ) 
) sets
order by `set`, sort

-- results

name    priority    sort
Test2   1   11:15:00
Test1   0   11:10:00
Test3   0   11:20:00
Test4   1   11:30:00