我有四个表,我需要获得 2 个计数,然后按用户表对它们进行分组。
SELECT (
SELECT COUNT(*)
FROM user_share us
INNER JOIN user_share_recipient usr
ON usr.share_id = us.id
WHERE usr.sent_at BETWEEN '2013-11-01' AND '2013-11-31'
) AS Shares,
(
SELECT COUNT(*)
FROM resource_tracking
WHERE created_at BETWEEN '2013-11-01' AND '2013-11-31'
) AS Views
FROM dual
这可以从三个表中获取总计数,但我需要加入第四个用户表,然后按用户名对每个表进行分组。所以我可以
select first name, last name (then the shares count)(then the views count)
from users (join the tables above on user_id columns on both tables)
group by username
所以我最终得到这样的结果:
First Name Last Name Shares Views
John Smith 20 40
这可能吗?我不能使用临时表
最佳答案
试试这个:
SELECT u.first_name,
u.last_name,
COALESCE(Shares.s_count,0),
COALESCE(VIEWS.v_count,0)
FROM users u
LEFT JOIN (
SELECT us.user_id, COUNT(*) AS s_count
FROM user_share us
INNER JOIN user_share_recipient usr ON usr.share_id = us.id
WHERE usr.sent_at BETWEEN '2013-11-01' AND '2013-11-31'
GROUP BY us.user_id
) AS Shares ON u.user_id = Shares.user_id
LEFT JOIN (
SELECT user_id, COUNT(*) AS v_count
FROM resource_tracking
WHERE created_at BETWEEN '2013-11-01' AND '2013-11-31'
GROUP BY user_id
) AS VIEWS ON u.user_id = VIEWS.user_id
使用 LEFT JOIN 获得结果,即使没有共享或 View 。在这些情况下使用 COALESCE TO 将它们设为 0。
关于mysql - 带连接的双重计数查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20355039/