mysql查询人员在表中的记录总数,没有补0

一张表,固定人员数量12个,想分别查询出这12个人在表中记录总数,没有显示0,固定人员顺序,最好结果是键值对形式的

兄弟你这个12个人员的名单是不是在另外一个表里呢
建两个表,一个表里存12个人人员的名单(加一个字段,数字类型的标识下顺序)A,另一个表里存相关的数据B

SELECT
  a.`name`,
  IFNULL (bb.num, 0)
FROM
  a
  LEFT JOIN
    (SELECT
      NAME,
      COUNT(NAME) num
    FROM
      b
    GROUP BY NAME) bb
    ON a.`name` = bb.`name`
ORDER BY a.`order`


img

img

img

这只能java处理了啊,因为mysql不知道没有的是哪些啊。
你拿到结果后对比一下,手动插入那些0的键值对就行了。

用case when then else end
存在就输出,不出在就输出0

Select name,

case when
count() is not null
then count(
) else 0 end as countName

form user group by name

hello_world_1996 的思路是对的,主查询(临时SQL可以使用Java中通过List传参,再在MyBatis的foreach进行循环拼接),使用 left join 就可以实现,如下供参考


SELECT a.user_id AS userId, IFNULL(COUNT(b.id), 0) AS totalQty
  FROM (SELECT '10010' AS user_id FROM dual
        UNION ALL
        SELECT '20010' AS user_id FROM dual
        UNION ALL
        SELECT '30010' AS user_id FROM dual
        UNION ALL
        SELECT '40010' AS user_id FROM dual) a
  LEFT JOIN 人员表 b
    ON a.user_id = b.user_id
   AND 过滤条件1

 GROUP BY a.user_id;

如有帮助,请采纳

SELECT a.name,IFNULL(bb.num,0) AS num FROM ( 
        /*固定人员编号或者名称*/
    SELECT 'name1' AS NAME
        UNION ALL
    SELECT 'name2'
        UNION ALL
    SELECT 'name3'
        UNION ALL
    SELECT 'name4'
        UNION ALL
    SELECT 'name5'
        UNION ALL
    SELECT 'name6'
)

AS a

LEFT JOIN
      
(SELECT NAME, COUNT(NAME) num FROM v_test GROUP BY NAME) bb    
 
 ON a.`name` = bb.`name`

v_test表内容:

img


查询结果:

img

补0,直接UNION 后再分组group 就可以了。

mysql版本是多少,如果是8以上,可以使用with...as来解决

select if(name is null,0,name) from table

一条信息没有,想显示在结果上,你在开玩笑吧,解决了发出来看看,观摩观摩

提示用group by写,行转列,百度一下,看相应的例子模仿下,最重要是你要动手创建一张表。

img

select name,ifnull(count(*),0) from table group by name;