簡體   English   中英

如何按條件排序?

[英]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

SQL小提琴演示

注意: ORDER BY type ,在默認情況下,它將按升序對type值進行排序。 等於ORDER BY type ASC 根據您的需要,您可以使用DESCASC

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM