簡體   English   中英

SQL語句查詢計數數據

[英]Sql statement query count data

我開始學習如何編寫sql語言,但遇到以下問題:現在我在名為“數據”的表中有一個數據

+------+-------+-------+-------+-------+
| id   | name  | type1 | type2 | type3 |
+------+-------+-------+-------+-------+
|    1 | Cake  | a     | b     | f     |
|    2 | Coca  | a     | d     | c     |
|    3 | Ice   | c     | b     | a     |
|    4 | Wine  | c     | e     | d     |
|    5 | Salad | c     | f     | a     |
|    6 | Water | d     | e     | f     |
+------+-------+-------+-------+-------+

我想編寫一條sql語句以計算出現在type1,type2,type3中的所有類型,所以我想要得到的結果是

+------+------+
| type | count|
+------+------+
|    a | 4    |
|    b | 2    |
|    c | 4    |
|    d | 3    |
|    e | 2    |
|    f | 3    |
+------+------+

假定我們不完全知道多少種不同類型和數量的列,那么您能指導我如何處理此問題嗎? 哦,我應該用級別編程語言而不是sql解決它嗎? 我在Symfony2上使用php。

提前致謝,

SELECT  type, COUNT(*) count
FROM    
    (
        SELECT  type1 type FROM data
        UNION ALL
        SELECT  type2 type FROM data
        UNION ALL
        SELECT  type3 type FROM Data
    ) AS subquery
GROUP   BY type

輸出值

╔══════╦═══════╗
║ TYPE ║ COUNT ║
╠══════╬═══════╣
║ a    ║     4 ║
║ b    ║     2 ║
║ c    ║     4 ║
║ d    ║     3 ║
║ e    ║     2 ║
║ f    ║     3 ║
╚══════╩═══════╝

一種只需要對數據表進行一次掃描的方法:

select type, count(*) from
(select case t.typeno
            when 1 then d.type1
            when 2 then d.type2
            when 3 then d.type3
        end type
 from (select 1 typeno union all select 2 typeno union all select 3 typeno) t
 cross join data d
) sq
group by type

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM