2011-12-09 182 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