SQL 技巧:在图表中对条形进行排序

一个简单的技巧,可以保留您希望柱状图中的柱形出现的顺序。

问题是这样的:您正在编写一个查询,并且希望在柱状图或漏斗图中保持结果的排序,但是查询返回的值却打乱了排序。

例如,假设您想对一些排序效果不佳的内容进行排序,比如您有四个不同步骤,标记为“第一”、“第二”、“第三”、“第四”,并且希望按照它们的语义顺序进行排序,而不管它们对应的具体值是什么。Metabase(或您使用的任何工具)会将这些值按字符串排序(即,它们将按字母顺序排序,而不是语义顺序,这没有多大意义:“第一”、“第四”、“第二”、“第三”)。

这里有一个重新排列图表以指定所需顺序的技巧。

  1. 无论您打算如何编写查询(当然要遵循最佳实践)。
  2. 假设您希望按名为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表达式排序的示例

Using a CASE expression to enforce the order of bars on a chart.

这是一个使用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

此技巧在使用漏斗图时特别有用,当您需要保留序列时。

这有帮助吗?

感谢您的反馈!
分析师每周技巧
获取可行的见解
关于 AI 和数据的资讯,直接发送到您的收件箱
© . This site is unofficial and not affiliated with Metabase, Inc.