SQL分组查询数量求旧

我有个这样的表

img

这是我想在前端页面展示的结果,请问怎样写SQL比较好

img


SELECT b,
SUM(CASE a WHEN '饺子' THEN 1 ELSE 0 END) as '饺子',
SUM(CASE a WHEN '米饭' THEN 1 ELSE 0 END) as '米饭'
FROM test 
GROUP BY b

img

你可以试试


select b, sum(if(a='饺子', 1, 0)) as '饺子', sum(if(a='米饭', 1, 0)) as '米饭'  from table_name group by b

这个表里应该不止"饺子"和"米饭"这两种吧?如果这个值的清单不是确定的,随时可以修改,那么就不建议写固定的sql来进行转换,因为sql的列数和字段名必须是确定的,总不能加一种食物就改一下sql吧?
因此,这里有两种方式,

  1. 由程序动态拼接sql,即先查有哪些值,然后按照楼上"qq_25376897"的这个格式来拼出对应的sql字符串,再传给数据库来执行出结果
  2. 程序先按原格式sql直接查询数据库,程序获取到数据后,由程序进行展示格式的转换,很多开发语言都有类似的pivot处理组件,如果没有,直接写几个循环也能处理出来

这个表设计的不好,很难扩展。一般都是用户表是一张表,别的表和用户表进行关联