复杂的MySQL COUNT查询

时间:2011-12-09 00:27:29

标签: mysql count

晚上的人,

我正在尝试执行复杂的MySQL COUNT查询,并且正在寻找最佳方法。

  • 在我们的系统中,我们有参考文献。每个参考文献都可以有很多(或没有)收入来源,每个收入来源都可以被验证(status)。我们有一个参考表和一个收入表 - 收入表中的每一行都指向参考reference_id
  • 在我们的“等待”页面(显示尚未验证的每个收入的屏幕)上,我们显示按参考分组。例如,您可能会看到约翰史密斯先生有3个收入来源。
  • 我们希望它在每一行旁边显示“2 of 3 Validated”
  • 我的问题是编写出来的问题!

我一直在尝试做的是,使用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行。

有什么方法可以实现我的目标?

谢谢!

1 个答案:

答案 0 :(得分:3)

在MySQL中,您可以对布尔表达式使用SUM()来获取该表达式为true的行的计数。你可以这样做,因为MySQL将true视为整数1,将false视为整数0。

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