[英]How to sort with conditions?
我只想在類型為A的情況下按“數字”對表格進行排序
| number | type |
|--------|------|
| 1 | A |
| 2 | B |
| 3 | B |
| 4 | A |
| 5 | A |
該請求將給出:
| number | type |
|--------|------|
| 1 | A |
| 4 | A |
| 5 | A |
| 2 | B |
| 3 | B |
對具有“ A”類型的行進行排序,然后列出“ B”行(無論順序如何)
沒有UNION可以做到嗎?
ORDER BY type, number
有效:
SELECT number, type
FROM Tablename
ORDER BY type, number
注意: ORDER BY type
,在默認情況下,它將按升序對type
值進行排序。 等於ORDER BY type ASC
。 根據您的需要,您可以使用DESC
或ASC
。
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 |
+--------+------+
CASE
語句可以提供幫助。
對於“ B”行,“不管順序”。 這是否意味着必須保留原始訂單? 在這種情況下,以下查詢可以提供幫助。
select * from TableName
order by type, CASE WHEN type='A' THEN number ELSE 0 END
如果不需要保留原始訂單,那么Strawberry回答的ELSE RAND()
很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.