现在有4个分类,比如就称为1:超市,2:医院,3:学校,4:酒店,
想统计每个分类的个数,
比如表是这样的:
ID name type
1 希望小学 3
2 人们医院 2
统计每个分类的个数,如果在表中没有就个数就为0,结果最好是这样:
TypeName NUM
超市 0
医院 1
学校 1
酒店 0
怎么用sql写啊?
如果是分类的话,建议加张分类表。
typeTable
id typeName type.
这样的话。
select nvl(t1.num,0), t2.typeName from (select t.type, count(*) as num from 'tableName' t group by t.type) t1
,typeTable t2
where t1.type = t2.type(+) 加上又连接,处理空值就好了。
SELECT decode(e, 1, '超市', 2, '医院', 3, '学校', 4, '酒店'),COUNT(1) from TEST GROUP BY e;
SELECT decode(type, 1, '超市', 2, '医院', 3, '学校', 4, '酒店') AS typename ,COUNT(1) AS NUM from TEST GROUP BY type;
[code="sql"]select b.typename, nvl(a.num, 0)
from (select type, sum(1) num from t group by type) a,
(select level type,
decode(level, 1, '超市', 2, '医院', 3, '学校', 4, '酒店') typename
from dual
connect by rownum < 5) b
where a.type(+) = b.type[/code]
我这里是通过:
select level type,
decode(level, 1, '超市', 2, '医院', 3, '学校', 4, '酒店') typename
from dual
connect by rownum < 5
模拟了类型定义
同楼上的意见,最好建个类型定义表
建议搞个类型定义表。
不想搞的话:
SELECT t.type, t.type_name, COUNT(f.*)
FROM (SELECT 1 TYPE, '超市' type_name
FROM dual
UNION ALL
SELECT 2 TYPE, '医院' type_name
FROM dual
UNION ALL
SELECT 3 TYPE, '学校' type_name
FROM dual
UNION ALL
SELECT 4 TYPE, '酒店' type_name FROM dual) t,
tab_name f
WHERE t.type = f.type(+)
group BY t.type, t.type_name