日期:2014-05-17  浏览次数:20995 次

关于oracle中分类查询的问题
现在有4个分类,比如就称为1:超市,2:医院,3:学校,4:酒店, 
想统计每个分类的个数, 
比如表是这样的: 
ID   name         type  
1    希望小学      3 
2    人们医院      2 

统计每个分类的个数,如果在表中没有就个数就为0,结果最好是这样: 
TypeName   NUM 
超市        0 
医院        1 
学校        1 
酒店        0 


怎么用sql写啊?
------最佳解决方案--------------------

with t1 as
(
     select 1 c1,'超市' c2 from dual
     union all
     select 2 c1,'医院' c2 from dual
     union all
     select 3 c1,'学校' c2 from dual
     union all
     select 4 c1,'酒店' c2 from dual
),t2 as
(
     select 1 id,'希望小学' name,3 type from dual
     union all
     select 2 id,'人们医院' name,2 type from dual
)

select c2,count(id) c_num
from t1 left join t2 on t1.c1 = t2.type
group by c2


     c2    c_num
---------------------
1 酒店 0
2 学校 1
3 医院 1
4 超市 0


------其他解决方案--------------------
可以加个表 记录4个类型 方便很多  不然就构造表
------其他解决方案--------------------
现在有字典表,存储这四个类型的
引用:
可以加个表 记录4个类型 方便很多  不然就构造表

------其他解决方案--------------------
需要按顺序排列的话  分组加个c1,按c1排序即可

group by c1,c2
order by c1
------其他解决方案--------------------
嗯,如果我的类型存在一个字典表里,比如叫tcDicType,
id       name     
1        超市
2        医院
3        学校
4        酒店
这样怎么查呢?

引用:
需要按顺序排列的话  分组加个c1,按c1排序即可

group by c1,c2
order by c1

------其他解决方案--------------------

select a.name,count(b.id) c_num
from tcDicType a left join 表2 b on a.id = b.type
group by a.id,a.name
order by a.id