问个sql语句,统计两个字段组合的行数,要把行数为0的情况也列出来,谢谢(结果正确再追加20分)

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
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-29
select count(*) from(select distinct * from TABLENAME) t
ORACLE测试过没问题,赶紧给分追问

我这里运行是出不了我想要的那种结果的吧,只有一行数据。您再看看?

追答

select b.id,b.brand,count(*)
from TABLENAME b group by b.id,b.brand

相似回答