鑒于下表,我想知道是否可以創建一個提供我正在尋找的結果的查詢(出于性能原因)。這是此類表的示例:
| ID | 分數 | 條件 | 時間戳 |
|---|---|---|---|
| 專案-1 | 37.5 | 真的 | ... |
| 專案-2 | 40.4 | 真的 | ... |
| 第 3 項 | 12.3 | 錯誤的 | 昨天 |
| 第 4 項 | 55.9 | 真的 | ... |
| 第 5 項 | 20.1 | 錯誤的 | 1周前 |
我正在尋找的結果是按以下標準排序的 id 串列:
- 首先, id 在 where
condisFalse,按 排序timestamp,最新的排在最前面。對于這個查詢,我可以使用類似的東西:SELECT id FROM table WHERE cond is false ORDER BY timestamp
- 其次,ids where
condisTrue,order byscore,最高分在前。對于這個查詢,我可以使用類似的東西:SELECT id FROM table WHERE cond is true ORDER BY score DESC
結果表將是這樣的:
| ID | 分數 | 條件 | 時間戳 |
|---|---|---|---|
| 第 3 項 | 12.3 | 錯誤的 | 昨天 |
| 第 5 項 | 20.1 | 錯誤的 | 1周前 |
| 第 4 項 | 55.9 | 真的 | ... |
| 專案-2 | 40.4 | 真的 | ... |
| 專案-1 | 37.5 | 真的 | ... |
我應該怎么做才能在一個查詢中獲得兩個查詢的結果?謝謝
uj5u.com熱心網友回復:
嘗試使用“UNION ALL”。
select * from
(
(SELECT id FROM table WHERE cond is false ORDER BY timestamp)
UNION ALL
(SELECT id FROM table WHERE cond is true ORDER BY score DESC)
) as newtable
uj5u.com熱心網友回復:
它按照您在order by子句中放置的順序組織表格。首先是條件(false然后true),然后date是條件score。
select *
from t
order by cond, case when cond = 'false' then "timestamp" end desc, score
| ID | 分數 | 條件 | 時間戳 |
|---|---|---|---|
| 第 3 項 | 12.3 | 錯誤的 | 昨天 |
| 第 5 項 | 20.1 | 錯誤的 | 1周前 |
| 第 4 項 | 55.9 | 真的 | ... |
| 專案-2 | 40.4 | 真的 | ... |
| 專案-1 | 37.5 | 真的 | ... |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504845.html
標籤:mysql sql PostgreSQL
