按年,月分组时计算值

时间:2017-04-25 21:34:32

标签: mysql sql mariasql

我的mySQL语句出现问题。声明1将给出正确的答案,但是当我将其扩展到声明2时,我得到的计数值明显偏离。我是否错过了GROUP BY的基本问题?

我真正需要的是返回最多3个计数以及完成它的月份和年份。有解决方案吗?提前致谢!

编辑:使用sql mode = full_group_by

SELECT
  count(t2.rec_date), any_value(t2.rec_date)
FROM results t1
  join patients t2
  on t1.barcode = t2.barcode
WHERE test LIKE '%ssc%'
and year(rec_date) = 2017
and month(rec_date) = 2;
>>> 366, '2017-02-01'

SELECT
  count(t2.rec_date) AS count,
  any_value(rec_date)
FROM results t1
  join patients t2
  on t1.barcode = t2.barcode
WHERE test LIKE '%ssc%'
GROUP BY EXTRACT(YEAR_MONTH FROM run_date)
ORDER BY count DESC
LIMIT 3;
>>> 415, 2017-02-28
>>> 373, 2017-01-31
>>> 365, 2016-10-04

1 个答案:

答案 0 :(得分:1)

我认为这是一个可怕的案例,你只需要一双新眼睛来看你的代码。

第一个查询根据字段rec_date中的年份和月份进行过滤。

第二个查询按字段run_date中的年份和月份进行分组。

除非这些字段以某种方式捆绑在一起,否则我认为这必须解释计数的差异。