SQL 技巧:图表条形排序
一个简单的技巧,可以保留您希望条形在图表中出现的顺序。
问题来了:您正在编写查询,并希望在条形图或漏斗图中保持结果排序,但查询返回的值会打乱排序。
例如,假设您想对一些排序效果不佳的内容进行排序,比如您有四个不同步骤,分别标记为“First”、“Second”、“Third”、“Fourth”,并且希望按照它们的语义顺序进行排序,而不管其对应的值是什么。Metabase(或您正在使用的任何工具)会将这些值作为字符串进行排序(即,它们会按字母顺序排序,而不是按语义排序,这将没有多大意义:“First”、“Fourth”、“Second”、“Third”)。
这是一个重新排列图表以指定所需顺序的技巧。
- 按照您打算编写的方式编写查询(当然,请遵循最佳实践)。
- 假设您想按名为
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
当您需要保留序列时,此技巧对于漏斗图尤其有用。