【问题标题】:Date sortorder on GROUP BY with averageGROUP BY 上的日期排序与平均值
【发布时间】:2013-12-25 09:48:57
【问题描述】:

请参阅以下查询。

SELECT date_format(`date`, '%d %b %Y') AS Datum, 
       AVG(NULLIF(`temp` ,0)) AS Temp, 
       AVG(NULLIF(`cod` ,0)) AS CZV, 
       AVG(NULLIF(`nh4` ,0)) AS NH4 
FROM reactor1 
  GROUP BY `datum` DESC

这会返回正确的数据,但日期的排序顺序不正确。它按天对日期进行排序。

01-NOV
05-NOV
07-DEC
09-DEC
13-NOV

我在这里做错了什么?

【问题讨论】:

    标签: mysql sql select sql-order-by average


    【解决方案1】:

    试试这个

    SELECT date_format(`date`, '%d %b %Y') AS Datum, 
           AVG(NULLIF(`temp` ,0)) AS Temp, 
           AVG(NULLIF(`cod` ,0)) AS CZV, 
           AVG(NULLIF(`nh4` ,0)) AS NH4 
    FROM reactor1 
      GROUP BY `Datum` ORDER BY `Datum` DESC
    

    【讨论】:

    • 在 GROUP BY 或 ORDER BY 中使用别名(基准)不起作用。它仍然对一天进行排序。
    【解决方案2】:

    试试这个:

    SELECT DATE_FORMAT(r.date, '%d %b %Y') AS Datum, 
           AVG(NULLIF(r.temp, 0)) AS Temp, 
           AVG(NULLIF(r.cod, 0)) AS CZV, 
           AVG(IFNULL(r.nh4, 0)) AS NH4 
    FROM reactor1 r 
    GROUP BY DATE(r.date) 
    ORDER BY DATE(r.date) DESC;
    

    【讨论】:

    • 抱歉,这会按正确的顺序对日期进行排序,但不会取平均值。显示特定日期的所有数据。
    • @Mookie 检查我更新的答案,如果它不起作用,请将示例数据提供给我,以便找出我的问题所在。
    • 对不起,也没有用。对我来说最简单的是添加数据图片。我在我的问题中使用了不同的列标题 ;-) !date reactor
    • @Mookie 检查我的更新答案。我正在考虑您在日期列中只存储了没有时间的日期。但是您将整个时间戳存储在日期列中。所以我在 Group by 和 Order by 子句中使用了 DATE 函数。立即查看
    • 你是最伟大的。有效。必须将 IFNULL 改回 NULLIF 以计算正确的平均值。很抱歉没有提到我正在使用时间戳,从而使您走错了路
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2020-11-17
    • 2017-12-09
    • 1970-01-01
    相关资源
    最近更新 更多