我有一個叫做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時它還不需要維護。此外,它認為這個表達式不應該在數據庫層處理。
順便,因為你的表只有一列,而它具有重復的值,這個列不能作為主鍵,因此這個表沒有主鍵。有人會說它因此不是一個“真正”的表,是個包。