为什么我后面的计数结果会覆盖掉前面的?截取了查询结果如图,求解答
SELECTa
.id
AS id
,a
.uid
AS uid
,a
.nickname
AS nickname
,
count( b
.id
) AS fans_num
,
count(c.id) AS '点赞数'
FROMims_agr_user
a
LEFT JOIN ims_agr_friend_list
b
ON a
.uid
= b
.friend_uid
LEFT JOIN ims_agr_zan c ON a.uid=c.uid
GROUP BYa
.uid
COUNT的结果是最终查询结果的数量,count哪个字段得出的结果是一样的。
你如果你表A<->B,A<->C都是一对一的关系,那最终结果都一样。
如果不是一对一的关系,你可以用COUNT(DISTINCT B.ID)和COUNT(DISTINCT C.ID)来取B表和C表的数量
子查询行不行呢?我感觉是不是 LEFT JOIN 的问题?
SELECT
a.id AS id,
a.uid AS uid,
a.nickname AS nickname,
(SELECT counr(b.id) FROM ims_agr_friend_list b WHERE b.friend_uid=a.uid ) AS fans_num,
(SELECT counr(c.id) FROM ims_agr_friend_list b WHERE c.uid=a.uid ) AS '点赞数',
FROM ims_agr_user a
GROUP BY
a.uid
COUNT的结果是最终查询结果的数量,count哪个字段得出的结果是一样的。
你如果你表A<->B,A<->C都是一对一的关系,那最终结果都一样。
如果不是一对一的关系,你可以用COUNT(DISTINCT B.ID)和COUNT(DISTINCT C.ID)来取B表和C表的数量
点赞那个是统计了满足条件的c.id的个数吧,数据库查询上是没问题的,只是你这个统计逻辑有点问题
count是当前语句 查询结果数量,无论你count(任何字段),得出的结果都一样,就比如count(*)和count(1)得出的结果是一样的。
建议可以使用子查询
SELECT
a.id AS id,
a.uid AS uid,
a.nickname AS nickname,
count( b.id is not null or null) AS fans_num,
count(c.id is not null or null) AS '点赞数' --count不会计算null
FROM
ims_agr_user a
LEFT JOIN ims_agr_friend_list b ON a.uid = b.friend_uid
LEFT JOIN ims_agr_zan c ON a.uid=c.uid
GROUP BY
a.uid