仅当类型为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的情况下做到这一点?
答案 0 :(得分:3)
ORDER BY type, number
将起作用:
SELECT number, type
FROM Tablename
ORDER BY type, number
注意:ORDER BY type
,在默认情况下,它将按升序对type
值进行排序。它等于ORDER BY type ASC
。根据您的需要,您可以使用DESC
或ASC
。
答案 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()
很好。