您好,我有以下数据库架构,3 个表:
connected_accounts (fields: id, user_id, account_name)
contacts (fields: id, user_id, connected_account_id, type)
user_recommendations (fields: id, user_id, contact_id)
我正在尝试输出一个查询,该查询显示数据库中每个 connect_account 记录、关联的联系人和 user_recommendations 的总数。这是我到目前为止所拥有的:
SELECT
ca.id,
ca.user_id,
ca.account_name,
COUNT(c.id) AS Total
FROM connected_accounts ca
LEFT JOIN contacts c
ON ca.id = c.connected_account_id
AND c.contact_type = 'email'
WHERE ca.resource_type = 'calendar.readonly'
ORDER BY ca.id DESC
LIMIT 8
这无法正常工作...所需的输出如下所示:
结果
id | user_id | account_name | Total Contacts | Total User Recommendations
我尚未加入 UserRecommendations,因为我的联系人加入功能未按预期工作。
我在查询中做错了什么?谢谢
更新:
SELECT
ca.id,
ca.user_id,
ca.account_name,
COUNT(c.id) AS 'Total Contacts',
COUNT(pr.id) AS 'Total User Rec.'
FROM connected_accounts ca
LEFT JOIN contacts c
ON ca.id = c.connected_account_id
AND c.contact_type = 'email'
LEFT JOIN user_recommendations pr
ON ca.id = pr.connected_account_id
WHERE ca.resource_type = 'calendar.readonly'
GROUP BY ca.id, ca.user_id, ca.account_name
ORDER BY ca.id DESC
LIMIT 8
上面已更新.. 上述更新后的查询为 Total Contacts
和 Total User Rec
返回相同的 # — 该数字对于两者来说是相同的联系人总数的正确数字。用户记录总数
未返回...为什么?
最佳答案
您错过了GROUP BY
。尝试这个。希望能帮助到你。
另外,LEFT JOIN
将拥有 connected_accounts
表中的所有记录,这是您想要的吗?
SELECT
ca.id,
ca.user_id,
ca.account_name,
COUNT(c.id) AS Total
FROM connected_accounts ca
LEFT JOIN contacts c
ON ca.id = c.connected_account_id
AND c.contact_type = 'email'
WHERE ca.resource_type = 'calendar.readonly'
GROUP BY ca.id, ca.user_id, ca.account_name
ORDER BY ca.id DESC
LIMIT 8
关于mysql - 输出两个关联表的总计的查询未正确返回总计,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52528275/