【问题标题】:MYSQL Group by weekofyear stopped workingMYSQL Group by weekofyear 停止工作
【发布时间】:2012-03-24 11:55:56
【问题描述】:

我遇到了一些 MYSQL 问题。下面的代码一直运行良好,直到一两周前它开始将 2012 年 2 月 21 日之后的任何内容组合在一起。第一个条目是 2011 年 9 月 18 日,所以它已经整整一年没有运行了。

SELECT dept, time, COUNT(*) AS freq
FROM prefix_table1 a
INNER JOIN prefix_table2 b b ON a.author = b.username
GROUP BY WEEKOFYEAR(DATE(FROM_UNIXTIME(time)))
ORDER BY time ASC
LIMIT 24 

我想用这个查询实现的只是检索每周发生的条目数。

一旦我有了它,我会在 PHP 中处理 UNIX 标记以获取一年中的周数,并将其添加到年份后缀,以允许统计数据工作超过 12 个月。

问题是 - 我哪里出错了?为什么它在 2012 年 2 月 21 日停止工作?

【问题讨论】:

    标签: php mysql datetime statistics group-by


    【解决方案1】:

    问题在于您按一组与您选择的字段不同的字段进行分组。该查询只是偶然发生的。我的意思是,您一直按 WEEKOFYEAR 分组并选择时间值。分组实际上做的是“删除”细节并与他们一起应用功能(在这种情况下是计数)组成一个组。

    现在,您尝试在分组的同时显示详细信息,这会导致查询不正确。例如,这会起作用,但不会显示详细信息:

    SELECT dept, WEEKOFYEAR(DATE(FROM_UNIXTIME(time))) as aWeek, COUNT(*) AS freq
    FROM prefix_table1 a
    INNER JOIN prefix_table2 b b ON a.author = b.username
    GROUP BY dept, aWeek
    ORDER BY aWeek
    LIMIT 24
    

    原始查询的错误逻辑的一个明显示例是:如果您已分组,例如,20 条记录(计数将显示 20)...如果您只能显示,您将为所有记录显示哪个时间其中有 1 条记录?

    编辑:

    正如@ypercube 所说,前面的查询可能不起作用,具体取决于您是否强制服务器遵守 ansi 标准。如果是这种情况,那么您可以尝试运行以下(并且有点不友好)查询:

    SELECT dept, WEEKOFYEAR(DATE(FROM_UNIXTIME(time))) as aWeek, COUNT(*) AS freq
    FROM prefix_table1 a
    INNER JOIN prefix_table2 b b ON a.author = b.username
    GROUP BY dept, WEEKOFYEAR(DATE(FROM_UNIXTIME(time)))
    ORDER BY aWeek
    LIMIT 24
    

    【讨论】:

    • 这不是有效的 SQL(尽管它可能在 MySQL 中工作)。您不应该(被允许)在 WHERE 子句中使用 SELECT 列表中定义的别名。
    • 不,也不能在WHERE 子句中使用别名。我在 GROUP BY 中使用它,它在 MySQL 中有效。
    • 我现在无法测试,但它可能只有在您没有设置(严格)ANSI 模式时才会运行。也许您应该在答案中添加它。
    • 哦,你可能是对的。这是AFAIK的默认行为,这就是我假设的原因。我补充一下
    • 感谢您为我指明正确方向的所有帮助。最终工作解决方案如下SELECT YEARWEEK(FROM_UNIXTIME(time)) as aWeek, COUNT(*) AS freq FROM prefix_table1 a INNER JOIN prefix_table2 b ON a.author = b.username GROUP BY aWeek ORDER BY aWeek
    猜你喜欢
    • 2020-06-16
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    相关资源
    最近更新 更多