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附带的示例数据库的例子,您可以亲自尝试。假设我们想按产品类别查看订单数量,但需要按以下顺序排序:Widget、Gizmo、Gadget、Doohickey。这是包含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
此技巧在使用漏斗图时特别有用,当您需要保留序列时。