好的,我看了,我似乎无法找到答案,我真的需要一些帮助。
我有3张桌子:
m(id, name), p(id, m_id, name), t(id, p_id, date, type, status)
他们加入为:
m.id = p.m_id
p.id = t.p_id
我需要得到t.type的计数,其中t.type = approved 按m.id和p.id分组
这是我到目前为止所做的,但是我得到了“子查询返回多行”的错误,或者我得到了一个应用于所有记录的总计数。
SELECT
m.`id`,
m.`company`,
(SELECT COUNT(t.`type`)
FROM t
INNER JOIN p on p.`id`=t.`p_id`
INNER JOIN m on p.`m_id`= m.`id`
WHERE t.`type`='approved' GROUP BY m.`id`) AS `app`
FROM m
INNER JOIN p
ON m.`id` = p.`m_id`
INNER JOIN t
ON p.`id` = t.`p_id`
WHERE t.`date` BETWEEN '2015-11-01 00:00:00' AND NOW()
GROUP BY m.`id`
ORDER BY m.`company
我完全迷失在这里。
答案 0 :(得分:2)
您可以尝试更改查询以使用COUNT,这样可以帮助您避免使用子查询。类似下面的查询,可以获得您想要的结果。
SELECT
m.`id`,
m.`company`,
COUNT(IF(t.`type` = 'approved', t.`type`, NULL)) AS `app`,
COUNT(IF(t.`type` = 'declined', t.`type`, NULL)) AS `dec`
FROM m
INNER JOIN p
ON m.`id` = p.`m_id`
INNER JOIN t
ON p.`id` = t.`p_id`
WHERE t.`date` BETWEEN '2015-11-01 00:00:00' AND NOW()
AND t.`type` IN ('approved', 'declined')
GROUP BY m.`id`
ORDER BY m.`company