MYSQL 显示大小写值,即使数据库中不存在该大小写

标签 mysql case

http://sqlfiddle.com/#!9/027e1e/19

此处的示例数据集:

CREATE TABLE IF NOT EXISTS `test` (
  `mode` varchar(10),
  `value` int(3)
);

INSERT INTO `test` (`mode`, `value`) VALUES
  ('xx-a', '1'),
  ('xx-a', '1'),
  ('xx-c', '2'),
  ('xx-d', '3');

此处的 SQL 查询:

SELECT CASE 
WHEN mode LIKE '%-a' THEN 'a'
WHEN mode LIKE '%-b' THEN 'b'
ELSE 'c' 
END AS channel,
IFNULL(SUM(value), 0)
FROM test
GROUP BY channel

当数据库中不存在值“%-b”时,仅返回包含“a”和“c”的 2 行。 我需要它为所有 a、b 和 c 返回 3 行,其中 b 显示 0。

谢谢

最佳答案

解决方案是使用union all:

select 
    'a' channel, 
    sum(case when mode like '%-a' then value else 0 end) sum_value
from mytable
union all select 
    'b', 
    sum(case when mode like '%-b' then value else 0 end) 
from mytable
union all select 
    'c', 
    sum(case when mode not like '%-a' and mode not like '%-b' then value else 0) 
from mytable

关于MYSQL 显示大小写值,即使数据库中不存在该大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58886238/

相关文章:

php - Mysql查询优化Multi Column Index解决这个慢?

php - 删除ID并删除带有另一个ID的Li标签

mysql - 查询在一个表中查找重复值

performance - 德尔福性能: Case Versus If

mysql - 在 select where 语句中展开查询结果

mysql - 根据另一个表中的值选择一个表中缺少的值

mysql - 在一个查询中使用 unique 、 Case 和 order by

mysql - 尝试将年份与大学生联系起来

eloquent - 如何在原始更新查询 laravel 上设置绑定(bind)

mysql - 根据条件选择不同的结果