You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过3表关联统计指定用户的全部爱好数量(含0值)

解决指定用户全爱好统计(含无关联爱好计数0)的问题

我来帮你修复这个SQL查询的问题~ 你原来的查询只返回有计数的爱好,核心原因是从referensi表开始关联,并且把用户过滤条件放在了WHERE子句里,导致没有关联的爱好被过滤掉了。

正确的SQL写法

我们需要以hobby表为基础(确保所有爱好都被包含),然后左连接该用户的关联记录,这样就能保留所有爱好,无关联的计数自然为0:

SELECT 
    h.id, 
    h.hobby, 
    COUNT(r.id) AS count
FROM hobby h
LEFT JOIN referensi r 
    ON h.id = r.ref_hobby 
    AND r.ref_person = 1  -- 把用户ID条件放在JOIN的ON子句里,而非WHERE
GROUP BY h.id, h.hobby
ORDER BY h.id;

为什么这样写有效?

  • 以hobby表作为主表:确保所有爱好都会出现在结果集中,不管有没有用户关联记录。
  • 左连接referensi并在ON子句中过滤用户:只会匹配当前用户的关联记录,没有关联的爱好对应的r.id会是NULL,COUNT(r.id)会忽略NULL值,从而统计为0。
  • GROUP BY包含hobby的所有非聚合字段:避免因数据库的分组规则(比如MySQL的ONLY_FULL_GROUP_BY)导致的语法错误。

如果想用用户名查询(而非ID)

可以改成这样,通过子查询获取用户ID:

SELECT 
    h.id, 
    h.hobby, 
    COUNT(r.id) AS count
FROM hobby h
LEFT JOIN referensi r 
    ON h.id = r.ref_hobby 
    AND r.ref_person = (SELECT id FROM person WHERE name = 'Rose')
GROUP BY h.id, h.hobby
ORDER BY h.id;

测试结果示例

查询Rose(ID=1)时,结果会是:

idhobbycount
1Makan1
2Renang0
3Nyanyi1
4Youtube1
5Masak0

查询Jisoo(ID=3)时,结果会是:

idhobbycount
1Makan0
2Renang0
3Nyanyi0
4Youtube0
5Masak1

内容的提问来源于stack exchange,提问作者Denny Kurniawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:30:26