2011-12-09 176 views
2

傍晚的人,複雜的MySQL COUNT查詢

我有一個複雜的MySQL COUNT查詢我試圖執行並正在尋找最佳方式來執行此操作。

  • 在我們的系統中,我們有參考文獻。每個參考可以有很多(或沒有)收入來源,每個可以驗證或不驗證(status)。我們有一個參考表和收入表 - 收入表中的每一行都指向參考reference_id
  • 在我們的「等待中」頁面(顯示每個收入尚未驗證的屏幕)上,我們將其顯示爲分組引用。例如,你可以看到約翰史密斯先生有3個收入來源。
  • 我們想讓它顯示類似「2 3認證的」每行旁邊
  • 我的問題是寫一個數字了這一點查詢!

我一直在努力做的就是這一點,使用PHP和MySQL的組合來彌補缺口,其中SQL(或我所知)沒有達到:

首先,選擇數量的COUNT與每個參考相關聯的收入:

SELECT `reference_id`, COUNT(status) AS status_count 
FROM (`income`) 
WHERE `income`.`status` = 0 
GROUP BY `reference_id` 

接着,對具有使用PHP生成一個WHERE IN子句,則繼續COUNT確認引用的數目從這些:

SELECT `reference_id`, COUNT(status) AS status_count 
FROM (`income`) 
WHERE `reference_id` IN ('8469', '78969', '126613', ..... etc 
AND status = 1 
GROUP BY `reference_id` 

但是這不起作用。它返回0行。

任何方式來實現我後?

謝謝!

回答

3

在MySQL中,您可以使用布爾表達式的SUM()來獲取表達式爲真的行數。你可以這樣做,因爲MySQL將整數1視爲真,將整數視爲整數0.

SELECT `reference_id`, 
    SUM(`status` = 1) AS `validated_count`, 
    COUNT(*) AS `total_count` 
FROM `income` 
GROUP BY `reference_id` 
+0

哇 - 從來不知道它可以做到這一點。謝謝! – Jack