2017-10-10 96 views
1

我有以下查詢。ORDER子句與表達式

SELECT 
    mp.id 
FROM 
    p_maint_prior pmp 
    JOIN maint_prior mp ON(pmp.cid=mp.cid AND pmp.main_pr_id = mp.id) 
WHERE 
    pmp.property_id = 12345 
    AND pmp.cid = 235 
    AND pmp.remote_primary_key IS NOT NULL 
ORDER BY 
    mp.maint_prio_type_id = 3, 
    mp.maint_prio_type_id DESC 
LIMIT 1; 

有了這個查詢,它給了我優先,如果它有類型ID 3,否則它會給隨機的。想了解更多關於ORDER BY子句中使用的表達式的信息。

+0

你能更具體嗎?什麼是問題? –

回答

1

關閉。這ORDER BY提出3 最後第一

ORDER BY mp.maint_prio_type_id = 3, mp.maint_prio_type_id DESC 

原因很簡單: 「真」 比 「假」 做大。這是更容易理解,如果你這樣做:

ORDER BY (mp.maint_prio_type_id = 3)::int, mp.maint_prio_type_id DESC 

這給「真」的值爲「1」和假的值爲「0」。排序順序顯而易見。

如果你想「3」第一,然後把DESC旁邊的第一個關鍵:

ORDER BY (mp.maint_prio_type_id = 3) DESC, mp.maint_prio_type_id DESC 

這是一個奇怪的概念,但是 - 與在SQL很多東西 - 一個被用來它很快。