问个sql语句,统计两个字段组合的行数,要把行数为0的情况也列出来,id | brand |+-------------+-------+| | 1001 | A || 1002 | A || 1002 | B || 1002 | B || 1002 | B || 1002 | C || 1003 | A || 1003 | B || 1003 | C || 1004 | A || 100
来源:学生作业学帮网 编辑:学帮网 时间:2024/05/23 23:00:09
问个sql语句,统计两个字段组合的行数,要把行数为0的情况也列出来,
id | brand |
+-------------+-------+|
| 1001 | A |
| 1002 | A |
| 1002 | B |
| 1002 | B |
| 1002 | B |
| 1002 | C |
| 1003 | A |
| 1003 | B |
| 1003 | C |
| 1004 | A |
| 1004 | A |
| 1004 | B |
| 1005 | A |
| 1005 | A |
假设我有如上的数据,表的名字假设为info吧,我想得到如下的的输出,
就是多出来的num字段,是对id和brand组合的计数统计,关键问题是,比如1001和B的组合是没有的,但是也要给出一个0,来表示没有这个组合,其实如果是直接忽略掉次数为0的这种情况是比较简单的,但是一定要把为0的情况也列出来.我实在想不出来了,
id | brand |num
+-------------+-------+-------
| 1001 | A |2
| 1001 | B |0
| 1001 | C |0
| 1002 | A |1
| 1002 | B |3
| 1002 | C |1
| 1003 | A |1
| 1003 | B |1
| 1003 | C |1
| 1004 | A |2
| 1004 | B |1
| 1004 | C |0
| 1005 | A |2
| 1005 | B |0
| 1005 | C |0
try
SELECT t.id,t.brand, count(info.id)
FROM (SELECT DISTINCT t1.brand, info.id from (SELECT distinct brand from info) t1, info) t LEFT JOIN info
ON t.brand = info.brand and t.id = info.id
group by t.id,t.brand
order by t.id