一张表,固定人员数量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`
这只能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表内容:
补0,直接UNION 后再分组group 就可以了。
mysql版本是多少,如果是8以上,可以使用with...as来解决
select if(name is null,0,name) from table
一条信息没有,想显示在结果上,你在开玩笑吧,解决了发出来看看,观摩观摩
提示用group by写,行转列,百度一下,看相应的例子模仿下,最重要是你要动手创建一张表。
select name,ifnull(count(*),0) from table group by name;