2014-09-26 43 views
0

我需要计数记录一年明智,我做了一些查询,但我没有得到正确的结果。以下是我的查询。但是这对我没有用。任何人都可以请看看这个,给我正确的查询?任何帮助将不胜感激。如何统计全年的记录?

SELECT 
(SELECT count(DISTINCT id) FROM call_response WHERE disposition=0 AND user_id=pu.id ) AS `trueAlarm`, 
(SELECT count(DISTINCT id) FROM call_response WHERE disposition=1 AND user_id=pu.id ) AS `falseAlarm`, 
(SELECT count(DISTINCT id) FROM call_response WHERE disposition=2 AND user_id=pu.id ) AS `disregarded`, 
YEAR(cr.created_date) AS `callYear` 
FROM `call_response` AS `cr` 
INNER JOIN `permit_users` AS `pu` 
ON cr.user_id=pu.id 
WHERE (pu.is_deleted=0 AND pu.is_trashed=0 AND cr.is_deleted=0) 
GROUP BY `callYear` 
+0

什么是你期待?你有什么?请在你的问题中更具体 – 2014-09-26 10:31:17

+1

你可以做一个SQL小提琴(http://sqlfiddle.com/)? – 2014-09-26 10:31:23

+0

从你提供的信息来看,我的猜测是针对这些不同的选择。 是否删除所有3个请求返回的东西? – Cyrbil 2014-09-26 10:33:37

回答

2

您想要的查询使用条件聚合或子查询,但不是两者。换句话说,要么使用子查询,要么没有外连接到call_response。或者,拥有外连接但不包含子查询。

我会写这样的查询:

SELECT count(distinct case when disposition = 0 AND user_id = pu.id then id end) as trueAlarm, 
     count(distinct case when disposition = 1 AND user_id = pu.id then id end) as falseAlarm, 
     count(distinct case when disposition = 2 AND user_id = pu.id then id end) as disregarded, 
     YEAR(cr.created_date) AS `callYear` 
FROM `call_response` `cr` INNER JOIN 
    `permit_users` `pu` 
     ON cr.user_id = pu.id 
WHERE pu.is_deleted = 0 AND pu.is_trashed = 0 AND cr.is_deleted = 0 
GROUP BY `callYear`; 
+1

+1,尽管如此,但你把它放在更好的单词中;) – Cyrbil 2014-09-26 11:16:09