我正在尝试在Laravel雄辩语法中运行以下SQL查询(在此处不正确(,以在给定的日期中选择startdate
的出现数量:
SELECT COUNT(startdate) as TotalCount
FROM Users
WHERE startdate >= '2017-01-01'
AND startdate <= '2017-12-31'
AND startdate IS NOT NULL
GROUP BY Month(startdate)
现在,我知道这可能不是正确的。尤其是GroupBy
不正确。我还一直在获得"数据库中找不到的时区"错误。我如何纠正错误并执行正确的查询,以使结果有些类似于以下内容:
January: 1
February: 3
March: 0
April: 9
....
编辑:错误的php代码:
$starters = User::select(DB::raw('Count(*), startdate'))
->groupBy(Carbon::parse('startdate')->format('m'))
->get();
您可能正在寻找此处记录的MONTHNAME
函数... https://dev.mysql.com/doc/refman/5.5/en/date--------/date--------------------------------------------------.html#function_monthname
对于您的查询,使用非常简单。
SELECT MONTHNAME(startdate) AS `month`, COUNT(*) AS `TotalCount`
FROM Users
WHERE startdate >= '2017-01-01'
AND startdate <= '2017-12-31'
AND startdate IS NOT NULL
GROUP BY MONTHNAME(startdate)
您几乎总是想选择您要分组的任何内容,其余的项目应该是聚合(例如Count,Sum,AVG等(
(您只需要在这里小心,因为如果您返回超过一年,它将开始在两个年份中同一个月的结果包括,因为您只按月按分组。如果这是您想要的,那么显然还可以,但是也可能有必要在选择中添加 YEAR(startdate)
。