我想表明即使有人没有价值。
SELECT tablesite.name,
tablesite.family,
tablesite.phone_number,
COUNT(*)
FROM tablesite
LEFT JOIN action
ON tablesite.id_user=action.service_provider_id
WHERE action.vote !='' AND customer_comment =''
GROUP BY name
结果就是这样。我希望所有人都没有价值。
这是我的“桌面”:
这是表格“行动”:
答案 0 :(得分:3)
通过将谓词放在WHERE子句而不是JOIN子句中,您将导致所有没有这些值的行被排除。将谓词移动到连接将允许返回tablesite
的所有行,包括这样您将获得计数为0的结果。
COUNT也需要更改,以动作表为前缀,因此不包括tablesite返回的行数。
SELECT tablesite.name,
tablesite.family,
tablesite.phone_number,
COUNT(action.action_id)
FROM tablesite
LEFT JOIN action
ON tablesite.id_user=action.service_provider_id
AND action.vote !='' AND action.customer_comment =''
GROUP BY name, family, phone_number
由于我不知道哪些列可以为null,我只是编写了一个action_id列,我认为它是您的主键而不是null。如果计算可以为空的列,则可能不包括
答案 1 :(得分:1)
然后将WHERE子句中的2个条件移动到JOIN条件。理由是当两个表连接时应用where子句,从而消除那些将有0个动作的人:
getUnreadNotifications
我还扩展了group by子句,使您的代码符合sql标准。按版本划分的组即使在mysql中也只能在某些条件下运行。
更新:忘记更改计数的基础:count(*)计算返回的行数,每个人至少为1,因为来自表格表的记录。将其更改为count(action.service_provider_id)(这是您加入操作表的列),以计算来自操作表的记录数。