【问题标题】:Grouping data into buckets - SQL将数据分组到存储桶中 - SQL
【发布时间】:2019-02-28 10:22:00
【问题描述】:

我试图让 SQL 将一些连续数据分组到两个存储桶中,但它引发了“在 GROUP BY 子句中不允许使用聚合函数”错误。我该如何规避呢?

SELECT
(CASE WHEN AVG(amount) BETWEEN 0 AND 100000 THEN "Group 1"
WHEN AVG(amount) > 100000 THEN "Group 2" END) AS Bucket
, AVG(amount)
FROM DB
GROUP BY bucket

【问题讨论】:

  • 将查询包装在外部SELECT 查询中。
  • 什么意思?

标签: sql sqlite bucket


【解决方案1】:

我相信这就是你要找的东西

SELECT
(CASE amount BETWEEN 0 AND 100000 THEN "Group 1"
WHEN amount > 100000 THEN "Group 2" END) AS Bucket
, AVG(amount)
FROM DB
GROUP BY bucket

【讨论】:

  • 它只给我第二个桶(即使我知道第一个包含值)
  • 如果amount 包含一个介于 0 和 100000 之间的值,那么您应该会看到一个“Group 1”存储桶。也许你可以尝试在db-fiddle.com 设置一些东西?
  • 发现问题了,我的“金额”数据是字符串格式的!
【解决方案2】:

您不需要 group by,因为您只处理 AVG。

SELECT
(CASE WHEN AVG(amount) BETWEEN 0 AND 100000 THEN "Group 1"
WHEN AVG(amount) > 100000 THEN "Group 2" END) AS Bucket
, AVG(amount)
FROM DB

【讨论】:

    【解决方案3】:

    尝试如下

    SELECT
    CASE when amount BETWEEN 0 AND 100000 THEN 'Group 1'
    WHEN amount > 100000 THEN 'Group 2' END AS Bucket
    , AVG(amount)
    FROM DB
    GROUP BY CASE when amount BETWEEN 0 AND 100000 THEN 'Group 1'
    WHEN amount > 100000 THEN 'Group 2' END
    

    【讨论】:

    • 它只给我第二个桶(即使我知道第一个包含值)
    • @JohannSchwaller 分享有问题的样本数据和预期输出
    • 发现问题了,我的“金额”数据是字符串格式的!
    猜你喜欢
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多