[英]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.