SQL按type计算行数的三种方法
2008-10-24 10:07:13 来源:WEB开发网我有一个叫做TestTable的表,它有一个字段,Type Varchar(5)。表中的数据如下:
Type
A
B
A
C
A
B
所以在这个表中这个单独的字段里有六条记录。请帮助我写一个查询获得下面的结果:
A B C
3 2 1
换句话说我想获得单独的Type字段数据和它们的数量。
Rudy Limeback:
有三种方式可以实现它:
select ( select count(*)
from TestTable
where Type = 'A' ) as A
, ( select count(*)
from TestTable
where Type = 'B' ) as B
, ( select count(*)
from TestTable
where Type = 'C' ) as C
在有些数据库里这第一个查询确实可以运行,但是它不是标准的SQL,因为它缺少了FROM条件。添加上双重FROM(或者其他任何一行的表)。
select sum( case when Type = 'A'
then 1 else 0 end ) as A
, sum( case when Type = 'B'
then 1 else 0 end ) as B
, sum( case when Type = 'C'
then 1 else 0 end ) as C
from TestTable
第二个查询确实可以得出你想要的,但是就像第一个查询一样,如果你发觉需要增加另一个Type,维护起来很麻烦。
select Type
, count(*)
from TestTable
group
by Type
第三个查询是最好的。不只是它一看就很容易理解,而且当添加新的Types时它还不需要维护。此外,它认为这个表达式不应该在数据库层处理。
顺便,因为你的表只有一列,而它具有重复的值,这个列不能作为主键,因此这个表没有主键。有人会说它因此不是一个“真正”的表,是个包。
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
更多精彩
赞助商链接