如何在mysql中按日期获取值出现的次数

如何在mysql中按日期获取值出现的次数,mysql,sql,Mysql,Sql,我有一个有很多值的表,但我只关心年、日、月和贡献因子 如何编写一个查询,使其给出每个贡献因子值每天出现的次数 例如: 年、月、日、影响因素、发生时间、 2017年10月21日司机分心48 我试过使用 SELECT `year`,`day`,`month`, CONTRIBUTING_FACTOR_VEHICLE_1, COUNT(CONTRIBUTING_FACTOR_VEHICLE_1) as occurrences FROM table GROUP BY CONTRIBUTING_FACTO

我有一个有很多值的表,但我只关心年、日、月和贡献因子

如何编写一个查询,使其给出每个贡献因子值每天出现的次数

例如:

年、月、日、影响因素、发生时间、

2017年10月21日司机分心48

我试过使用

SELECT `year`,`day`,`month`, CONTRIBUTING_FACTOR_VEHICLE_1, COUNT(CONTRIBUTING_FACTOR_VEHICLE_1) as occurrences
FROM table
GROUP BY CONTRIBUTING_FACTOR_VEHICLE_1

但是我想不出一个方法来写它,这样我就不会得到一个错误1055。

听起来像是你在寻找
从[TABLE]中选择计数(贡献系数),其中day=[day]

虽然假设您无法使用简单的
WHERE
子句,但您可以尝试依赖
COUNT
只计算非空值这一事实:

SELECT COUNT(当day=[day]然后是1 ELSE NULL END时的案例贡献系数)

从[表]。

您需要一个日期列作为函数的参数,并且您需要在group by子句中包含该列,例如

SELECT
       year(datecol)
     , month(datecol)
     , day(datecol)
     , CONTRIBUTING_FACTOR_VEHICLE_1
     , COUNT(*) as occurrences 
FROM table 
GROUP BY 
       year(datecol)
     , month(datecol)
     , day(datecol)
     , CONTRIBUTING_FACTOR_VEHICLE_1
 ;
请注意,在GROUPBY子句中重复这3个函数调用可能会显得效率低下,但事实并非如此。SQL查询的工作方式是在select子句之前执行GROUPBY子句,因此不会降低查询的效率

此外,SQL标准要求select子句的所有*“非聚合”列也在GROUPBY子句中使用


所有*除了存在“函数依赖性”和其他一些边缘情况外,从纯实际的角度来看,只需重复所有非聚合列(即所有列不使用COUNT()MIN()MAX()AVG()等)

我实际上建议使用
date()
函数:

SELECT date(daatecol), CONTRIBUTING_FACTOR_VEHICLE_1, 
       COUNT(*) as occurrences
FROM table
GROUP BY date(daatecol), CONTRIBUTING_FACTOR_VEHICLE_1;

我认为使用日期列比使用年、月和日三个单独的值更简单。

问题是我希望它分别用于5年内的所有日期。如果我只想举个例子,你的建议就行了