COUNT ifnull mysql查询

时间:2013-04-25 09:25:16

标签: mysql sql count

我的数据库中有2个表,车队和personnel_onboard_fleets。我试图获得所有车队的列表(其中有效)并计算每个车队有多少人员(没有)。但是,如果没有任何人员,则不会显示结果。

SELECT f.*, count(pof.ID) AS onboard 
FROM fleets f, personnel_onboard_fleets pof 
WHERE f.fleet_ID = pof.fleet_ID ORDER BY f.status

我期待2个结果,一个车队有两个人在船上,一个船上没有人。但是我只得到了一个结果。我试过使用以下

SELECT f.*,  IFNULL(COUNT(pof.ID), 0) AS onboard 
FROM fleets f, personnel_onboard_fleets pof 
WHERE f.fleet_ID = pof.fleet_ID ORDER BY f.status

我真的看不出查询有什么问题,是否需要添加任何其他内容来显示船上0人的车队。

我在计算前的原始查询显示所有车队都很好,所以我知道这与计数有关。

这让我抓狂!任何帮助将不胜感激!!

3 个答案:

答案 0 :(得分:1)

尝试:

SELECT f.fleet_id,
       Count(pof.id) AS onboard
FROM   fleets f
       LEFT JOIN personnel_onboard_fleets pof
              ON f.fleet_id = pof.fleet_id
GROUP  BY f.fleet_id
ORDER  BY f.status;  

答案 1 :(得分:0)

COUNT()是一个聚合函数,它返回总行数。如果指定字段名称(与您一样),则返回非NULL值的数量。

您需要使用GROUP BY。这会根据字段聚合行。然后,COUNT()返回每个组的总数。

SELECT f.fleet_ID, count(pof.ID) AS onboard
    FROM fleets f LEFT JOIN personnel_onboard_fleets pof
    ON f.fleet_ID = pof.fleet_ID
    GROUP BY f.fleet_ID
    ORDER BY f.status;

答案 2 :(得分:0)

您的内部联接将消除pof中不满足=运算符的任何行。

您需要左连接,例如:

SELECT f.*, COUNT(pof.fleet_ID) AS onboard 
FROM fleets f
LEFT JOIN personnel_onboard_fleets pof ON f.fleet_ID = pof.fleet_ID
GROUP BY f.fleet_ID ORDER BY f.status