2017-04-25 102 views
0

我的mySQL語句出現問題。聲明1將給我正確的答案,但是,當我將其擴展到聲明2時,我得到的計數值顯着偏離。我錯過了GROUP BY的一個基本問題嗎?按年份,月份分組時關閉計數值

我真正需要的是返回最大3個計數和它完成的月份和年份。有解決方案嗎?提前致謝!

編輯:使用SQL模式= 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 
+0

您應該獲得2017-02的asme結果。 366對415真的很好奇。 –

+0

是的。這讓我瘋狂。我已經驗證了手動設置的數據。這就是導致我相信我沒有完全瞭解GROUP BY – kevincicero

+2

的原因。但是根據'run_date'和另一個'rec_date'分組。 –

回答

1

我覺得這是那些可怕的情況下,你只需要一個新鮮的一雙眼睛看你的代碼之一。

第一個查詢根據字段rec_date的年份和月份篩選。

第二個查詢按字段run_date從年份和月份分組。

除非這些字段以某種方式連在一起,否則我認爲這必須解釋計數的差異。

+0

哇!接得好。 –