如何在mysql中按日期获取值出现的次数
我有一个有很多值的表,但我只关心年、日、月和贡献因子 如何编写一个查询,使其给出每个贡献因子值每天出现的次数 例如: 年、月、日、影响因素、发生时间、 2017年10月21日司机分心48 我试过使用如何在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
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年内的所有日期。如果我只想举个例子,你的建议就行了