显示零值查询

时间:2015-11-16 14:13:48

标签: mysql sql

我想表明即使有人没有价值。

 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
  

结果就是这样。我希望所有人都没有价值。

result

这是我的“桌面”:

tablesite

这是表格“行动”:

enter image description here

2 个答案:

答案 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)(这是您加入操作表的列),以计算来自操作表的记录数。