我有一个像下面的表来保存用户记录。我想首先列出权限字段为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
我试图通过排序和组合它们来分别得到这两个组,但它没有按照我想要的方式工作。
答案 0 :(得分:6)
如下代码
SELECT *
FROM `users`
ORDER BY permission ASC , username ASC
你应该首先写下你想要最初订购的列的名称,然后是第二个,第三个等等
答案 1 :(得分:5)
SELECT
*
FROM users
ORDER BY
permission ASC,
name ASC;
您不需要两个单独的查询
首先,结果集根据permission
列的值按升序排列(从低到高)。
现在您有一个排序列表,其中0
为permission
的所有记录将首先出现。
接下来,如果您在此排序列表上的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
答案 2 :(得分:1)
您可以按两个字段排序。无需做任何事情。
SELECT
*
FROM yourtable
ORDER BY name ASC,
permission ASC