首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL `HAVING`问题

MySQL `HAVING`问题
EN

Stack Overflow用户
提问于 2011-07-29 19:43:05
回答 3查看 113关注 0票数 0

我有两个查询,它们返回不同的结果,而我希望它们返回相同的结果。

第一个查询返回正确的结果。第二个返回一个结果,但它是不正确的。

为什么会这样?我如何修复第二条语句,使其返回相同的结果?我必须在这条语句中使用HAVING子句。

1.

代码语言:javascript
复制
    SELECT
        CAST(CONCAT(DATE(`mytable`.`starttime`),' ',HOUR(`mytable`.`starttime`),':',LPAD(60*(MINUTE(`mytable`.`starttime`) DIV 60),2,'0'),':00') AS DATETIME) AS `date`,
        `mytable`.`id`
    FROM
        `mytable`
    WHERE
        `mytable`.`starttime`>='2011-07-01 00:00:00'
        AND `mytable`.`starttime`<='2011-07-01 23:59:59'
        AND `id` BETWEEN 1 AND 100
    GROUP BY
        `mytable`.`id`

2.

代码语言:javascript
复制
    SELECT
        CAST(CONCAT(DATE(`mytable`.`starttime`),' ',HOUR(`mytable`.`starttime`),':',LPAD(60*(MINUTE(`mytable`.`starttime`) DIV 60),2,'0'),':00') AS DATETIME) AS `date`,
        `mytable`.`id`
      FROM
        `mytable`
    WHERE 
        `id` BETWEEN 1 AND 100
    GROUP BY
        `mytable`.`id`
    HAVING `date` IN ('2011-07-01 00:00:00', '2011-07-01 01:00:00', '2011-07-01 02:00:00', '2011-07-01 03:00:00', '2011-07-01 04:00:00', '2011-07-01 05:00:00', '2011-07-01 06:00:00', '2011-07-01 07:00:00', '2011-07-01 08:00:00', '2011-07-01 09:00:00', '2011-07-01 10:00:00', '2011-07-01 11:00:00', '2011-07-01 12:00:00', '2011-07-01 13:00:00', '2011-07-01 14:00:00', '2011-07-01 15:00:00', '2011-07-01 16:00:00', '2011-07-01 17:00:00', '2011-07-01 18:00:00', '2011-07-01 19:00:00', '2011-07-01 20:00:00', '2011-07-01 21:00:00', '2011-07-01 22:00:00', '2011-07-01 23:00:00')

提前感谢您所能提供的任何帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-29 19:55:29

WHERE子句在GROUPing之前应用,而HAVING在之后应用。因此,在没有where子句的GROUP BY的第二个查询中,MySql返回一个随机的(未确定的)单行,然后对其应用HAVING子句。

票数 0
EN

Stack Overflow用户

发布于 2011-07-29 19:48:34

Group by与聚合函数- sum、min、max、count一起使用。您的查询似乎在"select“中没有聚合-因此group by不做任何事情。

虽然您的查询可能是有效的SQL,但它没有任何意义。不过,我不确定这是否是having子句发疯的原因。

票数 0
EN

Stack Overflow用户

发布于 2011-07-29 19:52:19

我假设"id“是您的表上的主键,对吗?我猜您想要显示一天中发生各种事件的时间,但我不确定您为什么要按id分组。你能举例说明你希望输出是什么样子的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6872589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档