如何对两个SELECT查询进行排序并组合它们

时间:2016-12-14 15:24:26

标签: mysql sql

我有一个像下面的表来保存用户记录。我想首先列出权限字段为0的用户,然后列出具有权限1的用户。但我还想按字母顺序对它们进行排序。

这是我的表:

users
--------------------------------
user_id     name     permission
1           jack      0
2           anne      0
3           kate      0
4           steve     1
5           roger     0
6           judy      1
7           robin     0
8           stella    1
9           arthur    0

我想得到这个结果:

users
---------------------------------
user_id       name       permission
2             anne       0
9             arthur     0
1             jack       0
3             kate       0
7             robin      0
5             roger      0
6             judy       1
8             stella     1
4             steve      1

如您所见,有两组,第一组是权限为“0”的用户,后来是权限“1”。但每个组本身也按字母顺序排序。

(
SELECT * 
FROM  `users` 
ORDER BY name ASC
)
UNION (

SELECT * 
FROM  `users` 
ORDER BY name ASC
)
ORDER BY permission ASC

我试图通过排序和组合它们来分别得到这两个组,但它没有按照我想要的方式工作。

3 个答案:

答案 0 :(得分:6)

如下代码

SELECT * 
FROM  `users` 
ORDER BY permission ASC , username ASC

你应该首先写下你想要最初订购的列的名称,然后是第二个,第三个等等

答案 1 :(得分:5)

SELECT 
 * 
FROM users
ORDER BY 
        permission ASC, 
        name ASC;

您不需要两个单独的查询

首先,结果集根据permission列的值按升序排列(从低到高)。

现在您有一个排序列表,其中0permission的所有记录将首先出现。

接下来,如果您在此排序列表上的name列上应用另一种排序,那么它将生成按字母顺序排序的列表,其中包含上一个排序顺序以及此排序顺序。

<强>测试

create table users(
  id int primary key AUTO_INCREMENT,
  name varchar(50),
  permission int
 );

INSERT INTO users(name,permission)
VALUES ('A',1),('D',0),('C',0),('B',1);

SELECT * FROM users;

id     name   permission

1        A       1
2        D       0
3        C       0
4        B       1
#Sort only by permission (ASC)

SELECT * FROM users ORDER BY permission ASC;

id     name   permission

2        D       0
3        C       0
1        A       1
4        B       1
#Sort first by permission (ASC), then by name (ASC)

SELECT * FROM users ORDER BY permission ASC, name ASC;

id     name   permission

3        C       0
2        D       0
1        A       1
4        B       1

SEE DEMO

答案 2 :(得分:1)

您可以按两个字段排序。无需做任何事情。

SELECT 
* 
FROM yourtable 
ORDER BY name ASC, 
         permission ASC