SQL 技巧:在圖表中排序長條
一個簡單的技巧,可保留您希望長條在圖表中出現的順序。
問題是:您正在撰寫查詢,並且想要在長條圖或漏斗圖上保持結果排序,但是查詢傳回的值會搞亂排序。
例如,假設您想要排序一些排序效果不佳的東西,例如如果您有四個不同的步驟標記為「第一」、「第二」、「第三」、「第四」,並且想要按照語義順序排序這些步驟,而不管它們的對應值是什麼。Metabase(或您正在使用的任何工具)會將這些值排序為字串(即,它們將按字母順序排序,而不是語義順序,這沒有多大意義:「第一」、「第四」、「第二」、「第三」)。
這是一個重新排列圖表以指定您想要的順序的技巧。
- 按照您要撰寫查詢的方式撰寫查詢(當然,遵循最佳實務)。
- 假設您想要依名為
step
的欄位中的值排序,在查詢的結尾,使用CASE
表達式來定義step
欄位中值的順序。
ORDER BY
CASE
WHEN step = 'First' THEN 1
WHEN step = 'Second' THEN 2
WHEN step = 'Third' THEN 3
WHEN step = 'Fourth' THEN 4
END
使用 CASE 表達式排序的範例
這是一個使用 Metabase 隨附的範例資料庫的範例,您可以親自試用。假設我們想要查看每個產品類別的訂單數量,但是我們需要像這樣對它們進行排序:小工具、小玩意、裝置、玩意兒。以下是包含 case 陳述式的程式碼
-- We want to return two columns, ordered by products.category
SELECT products.category,
Count(*)
FROM orders
LEFT JOIN products
ON orders.product_id = products.id
GROUP BY products.category
-- The CASE statement will assign a new value to sort by
ORDER BY CASE
WHEN products.category = 'Widget' THEN 1
WHEN products.category = 'Gizmo' THEN 2
WHEN products.category = 'Gadget' THEN 3
WHEN products.category = 'Doohickey' THEN 4
END
當您需要保留順序時,此技巧對於漏斗圖特別有用。