如何按条件排序?

时间:2019-06-07 12:13:03

标签: mysql sql

仅当类型为A时,我才想按“数字”对表格进行排序

MR19U003
MR19V002
MR19V001
SB19U028
OC19U002
MR18U002
MR18U001
MR18V001
SB18U010
SB18V005
OC18U007
OC18V005

请求将给出:

| number | type |
|--------|------|
| 1      |   A  |
| 2      |   B  |
| 3      |   B  |
| 4      |   A  |
| 5      |   A  |

对“ A”类型的行进行排序,然后列出“ B”行(无论顺序如何)

是否可以在没有UNION的情况下做到这一点?

3 个答案:

答案 0 :(得分:3)

ORDER BY type, number将起作用:

SELECT number, type
FROM Tablename
ORDER BY type, number

Demo on SQL Fiddle

注意:ORDER BY type,在默认情况下,它将按升序对type值进行排序。它等于ORDER BY type ASC。根据您的需要,您可以使用DESCASC

答案 1 :(得分:3)

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(number SERIAL PRIMARY KEY
,type CHAR(1) NOT NULL
);

INSERT INTO my_table VALUES
(1,'A'),
(2,'B'),
(3,'B'),
(4,'A'),
(5,'A');

SELECT * FROM my_table ORDER BY type,CASE WHEN type = 'A' THEN number ELSE RAND() END;
+--------+------+
| number | type |
+--------+------+
|      1 | A    |
|      4 | A    |
|      5 | A    |
|      3 | B    |
|      2 | B    |
+--------+------+

答案 2 :(得分:1)

CASE语句可以提供帮助。

对于“ B”行,“无论顺序如何”。这是否意味着必须保留原始订单?在这种情况下,以下查询会有所帮助。

select * from TableName 
order by type, CASE WHEN type='A' THEN number ELSE 0 END

如果不需要保留原始订单,那么草莓提供的ELSE RAND()很好。