按日和月分组原则

Posted

技术标签:

【中文标题】按日和月分组原则【英文标题】:Group By day and month Doctrine 【发布时间】:2014-04-22 00:00:20 【问题描述】:

我想按生日列出我的用户,所以是月份和日期,而不是年份。

我有这个问题

SELECT * 
FROM user 
WHERE birthDate IS NOT NULL 
GROUP BY MONTH(birthDate), DAY(birthDate)

但我不知道如何将它与 Symfony 和 Doctrine 一起使用。 我试过了

$result = $em->getRepository("AcmeApplicationBundle:SecurityServiceUser")
            ->createQueryBuilder('user')
            ->where('user.birthDate IS NOT NULL')
            ->groupBy('MONTH(user.birthDate), DAY(user.birthDate)')
            ->getQuery()
            ->getResult(); 

$result = $em->getRepository("AcmeApplicationBundle:SecurityServiceUser")
            ->createQueryBuilder('user')
            ->where('user.birthDate IS NOT NULL')
            ->groupBy('MONTH(user.birthDate)')
            ->groupBy('DAY(user.birthDate)')
            ->getQuery()
            ->getResult(); 

但在这两种情况下我都有一个错误

[语义错误] line 0, col 165 near 'MONTH(birthDate),':错误:无法按未定义的标识或结果变量分组。

【问题讨论】:

也许这个有帮助:***.com/questions/17702674/… 为什么会有这个查询? 你安装了 [github.com/beberlei/DoctrineExtensions](Doctrine Extensions) 吗? 【参考方案1】:

您可以使用以下之一:

format(as.Date,) 

strftime(source, format)

【讨论】:

【参考方案2】:

您尚未为您的值设置别名。这是一个更新的版本:

   $result = $em->getRepository("AcmeApplicationBundle:SecurityServiceUser")
        ->createQueryBuilder('user')
        ->select(' user.username, MONTH(user.birthDate) AS gBmonth, DAY(user.birthDate) AS gBday')
        ->where('user.birthDate IS NOT NULL')
        ->groupBy('gBmonth')
        ->addGroupBy('gBday')
        ->getQuery()
        ->getResult(); 

这应该可以正常工作。

【讨论】:

为什么一定要先选中才能分组 Ils 非常简单,就像在经典的 sql 查询中一样,您必须先在 select 中定义别名才能将其与 group 一起使用 这会抛出这个错误,为什么? Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'my_database.o0_.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 你还需要安装“composer require beberlei/DoctrineExtensions” @elvismdev,这些链接可能有助于理解:1.) dev.mysql.com/doc/refman/8.0/en/group-by-handling.html。 2.) medium.com/@riccardoodone/…

以上是关于按日和月分组原则的主要内容,如果未能解决你的问题,请参考以下文章

SQL按月统计,按日分组

Mysql按日周月进行分组统计

MySql按周,按月,按日分组统计数据

我需要从结构为 yyyyMMddHHmmss 20170227141500 的时间戳中按年和月分组

SQL 分组按周和月在同一时间 (Redshift)

Mysql按周,按月,按日,按小时分组统计数据