MySQL将所有记录重复计为一条记录

时间:2012-01-31 10:32:03

标签: mysql count distinct

我的SQL查询有一个小问题。也许我只是不能醒来,喝第二杯咖啡,但看起来我的大脑仍然无法工作或弄清楚它已经让我的一天(早上)非常糟糕。

我想要做的是将2个表中的记录计为重复记录为1条记录。让我们说; 会员表 2.订阅表。

我想知道有多少会员有有效订阅。

SELECT COUNT(*) FROM members as main 
INNER JOIN subscriptions as sub ON sub.member_id = main.id 
WHERE 
sub.status = '2' AND sub.active = '1' 
GROUP BY main.id

显然不是这样。成员可以有超过1个有效订阅,因此我想将该成员计为1个订阅者(无论成员有多少活动订阅)。

我正在计划为成员订阅创建一个新表,但是这将只有一个我可能不需要的表。

我们非常感谢任何建议。

2 个答案:

答案 0 :(得分:3)

构建查询的最直接方法是添加相关子查询:您的SQL几乎像英语一样:

SELECT COUNT(*)
FROM members as main 
where exists (
    select 1 from subscriptions as sub
    where sub.member_id = main.id  and sub.status = '2' AND sub.active = '1'
)

答案 1 :(得分:2)

这应该可以解决问题:

SELECT COUNT(DISTINCT main.id) FROM members as main 
INNER JOIN subscriptions as sub ON sub.member_id = main.id 
WHERE sub.status = '2' AND sub.active = '1'