SQL按type计算行数的三种方法

我有一个叫做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时它还不需要维护。此外,它认为这个表达式不应该在数据库层处理。

  顺便,因为你的表只有一列,而它具有重复的值,这个列不能作为主键,因此这个表没有主键。有人会说它因此不是一个“真正”的表,是个包。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值