温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - MYSQL GROUP BY LEFT JOIN and COUNT

其他 - MYSQL GROUP BY左联接和COUNT

发布于 2020-03-31 23:22:29

我在使用JOIN子句对MYSQL数据库中的项目进行分组和计数时遇到问题

我的两张桌子如下

用户表

id | surname | othernames
1  |  Doe    | John
2  |  Doe    | Jane
3  |  Doe    | Mary

订阅表

id | user_id | parent_subscription_id 
1  | 1       | Null
2  | 2       | 1
3  | 3       | 1
4  | 4       | 2                         
5  | 5       | 3
6  | 6       | 3

我需要能够产生如下列表

Name         |   Referrals
John Doe     | 2
Jane Doe     | 1
Mary Doe     | 2

换句话说,它是用户表中的用户,其users.id与subscriptions.user_id相匹配,subscriptions.user_id的订阅带有subscriptions.id,后者是另一个订阅的父订阅。这意味着,如果您的订阅被另一个订阅引用为其自己的parent_subscription_id,则该新订阅将成为您的引荐。

我尝试了以下查询,但没有给我预期的结果

SELECT users.surname, users.othernames,count('s.parent_subscription_id') as referrals 
FROM users 
    LEFT JOIN subscriptions s ON s.user_id=users.id 
group BY parent_subscription_id

我已经检查了关于SO的其他一些问题,但是找不到解决此类问题的任何方法。谢谢

查看更多

提问者
Josh
被浏览
20
Josh 2020-02-02 19:28

这个查询最终给了我一直在寻找的结果

SELECT u.surname,u.othernames,s1.id,s1.parent_subscription_id, 
s1.refcode, IFNULL(count(s2.parent_subscription_id),0) as referrals 
FROM `subscriptions` s1 left join subscriptions s2 
on s1.id=s2.parent_subscription_id 
LEFT JOIN users u ON u.id=s1.user_id
GROUP by s1.id

谢谢大家的指导和支持。我对此深表感谢