【问题标题】:ERROR: aggregate function calls cannot be nested - POSTGRESQL错误:不能嵌套聚合函数调用 - POSTGRESQL
【发布时间】:2019-10-16 02:23:37
【问题描述】:

我正在尝试在 30 天内创建一个具有记录历史记录的选择,其中值列得到一个计数,我只是希望它会添加每天返回的值。

查询

SELECT
    date_update AS Time,
    SUM(COUNT(values)) as "Value"
FROM
    tb_get_metrics
WHERE
    data_update >= CURRENT_DATE - 30
GROUP BY Time
ORDER BY Time

输出示例:

       Time                      Value
2019-10-14 09:46:54.789772        30
2019-10-15 09:46:54.789772        50
2019-10-16 09:46:54.789772        70

SELECT * FROM tb_get_metrics

  date_update(TimeStamp)        value(String)
2019-10-14 09:46:54.789772        apple
2019-10-14 09:46:55.789772        apple
2019-10-14 09:46:56.789772        apple
2019-10-14 09:46:57.789772        apple
2019-10-14 09:46:58.789772        apple
2019-10-14 09:46:59.789772        apple
2019-10-14 09:47:00.789772        apple
2019-10-14 09:46:01.789772        apple
2019-10-14 09:46:02.789772        apple
2019-10-14 09:46:03.789772        apple
2019-10-14 09:46:04.789772        apple
2019-10-14 09:46:05.789772        apple
2019-10-15 09:46:03.789772        potato
2019-10-15 09:46:04.789772        potato
2019-10-15 09:46:05.789772        potato
...

【问题讨论】:

  • 为什么需要COUNT("values")
  • 因为值是字符串,所以我想统计那天有多少个
  • 你能用SELECT * FROM tb_get_metrics 的样子更新帖子吗?
  • 去掉count周围的sum
  • 好的,完成,请检查!! @richyen

标签: sql postgresql


【解决方案1】:

您需要四舍五入日期:

SELECT
    date_update::date AS "Date",
    COUNT(values) as "Value"
FROM
    tb_get_metrics
WHERE
    data_update >= CURRENT_DATE - 30
GROUP BY Time
ORDER BY Time

【讨论】:

    【解决方案2】:

    仅从每个时间戳中获取日期部分以进行分组:

    SELECT
        date_update::date AS Time,
        COUNT(values) AS "Value"
    FROM tb_get_metrics
    WHERE date_update >= CURRENT_DATE - 30
    GROUP BY Time
    ORDER BY Time
    

    【讨论】:

    • 谢谢你的朋友,你的解决方案是有效的!
    【解决方案3】:

    通过截断时间戳的时间,您可以只关注日期,这是您的 WHERE 子句试图做的:

    postgres=# SELECT
        date_update::date AS "Date",
        COUNT(values) as "Count"
    FROM
        tb_get_metrics
    WHERE
        date_update::date >= CURRENT_DATE - 30
    GROUP BY "Date"           
    ORDER BY "Date";
        Date    | Count 
    ------------+-------
     2019-10-14 |    24
     2019-10-15 |     6
    (2 rows)
    

    【讨论】:

    • 完美的朋友非常感谢您为解决问题所做的努力!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多