即使count为0,如何获取行?只有一张桌子

时间:2019-07-07 19:03:20

标签: mysql sql select group-by

即使计数为0,我也要计数。我当前的查询是

SELECT `id`,count(0) as `fetchpc` FROM `user` WHERE pid in('4,6,7,8') GROUP BY `id` 

但是它只返回那些计数大于0的id

编辑: in('4,6,7,8')中使用的值首先在另一个查询中从数据库中获取。然后使用脚本将行转换为4,6,7,8。

因此所有值都存在于数据库中。

另外,返回的值有可能达到100个以上的值。

2 个答案:

答案 0 :(得分:3)

您可以在“虚拟”查询中加入该查询,该查询以文字形式查询这些ID:

<?php
for($i = 0.99; $i<= 30.99; $i++){
    $i = number_format((float)$i, 2);
    echo $i;
    if($i == 16.99){
        echo '<--- selected';
    }
    if($i == 29.99){
        echo '<--- selected';
    }
    if($i == 10.99){
        echo '<--- selected';
    }
    echo '<br>';
}

答案 1 :(得分:0)

您可以使用派生表。我建议:

SELECT i.id, COUNT(u.id) as fetchpc
FROM (SELECT 4 as id UNION ALL
      SELECT 6 as id UNION ALL
      SELECT 7 as id UNION ALL
      SELECT 8 as id 
     ) i LEFT JOIN
     `user` u
     ON u.id = i.id
GROUP BY i.id;

从性能的角度来看,这比先汇总(在子查询中)然后再进行汇总要好得多。基本上,聚合(在这种情况下)必须聚合 all 数据,然后过滤掉不必要的行。

此公式首先过滤行,这将加快聚合速度。