[英]mysql select with the same column appearing twice with different where clauses
[英]MySQL - Different WHERE clauses to same column
我有一種情況,我需要根據列的內容創建列。
例如,這是SQLFiddle- http ://sqlfiddle.com/#!2/0ec7a/1。
我需要得到這樣的結果:
--------------------------
| CITY | MALES | FEMALES |
--------------------------
| NY | 5 | 2 |
--------------------------
| DC | 2 | 1 |
--------------------------
我該怎么辦?
我正在看《 MySQL手冊》中的CASE WHEN
語句和IF
語句,但是更清晰的解釋將非常有用。
您甚至都不需要CASE
!
SELECT
city,
sum(gender = 'm') as males,
sum(gender = 'f') as females
FROM Population
group by city
請參見SQLFiddle中的此工作 。
這樣做的原因是,在mysql中, true
為1
, false
為0
,因此對一個條件求和就算它為true的次數!
對於(大多數?)其他數據庫,您必須在sum內使用無聊的大小寫: sum(case when gender = 'm' then 1 else 0 end)
等等
這種類型的數據布局稱為“樞軸” 。 一些數據庫,例如Oracle,通過對其SQL風格的特定擴展來本地支持它,但是在mysql中,您必須“自己滾動”。
SELECT CITY,
SUM(CASE WHEN GENDER = 'M' THEN 1 ELSE 0 END) MALE,
SUM(CASE WHEN GENDER = 'F' THEN 1 ELSE 0 END) FEMALE
FROM Population
GROUP BY City
您也可以做准備的陳述
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(CASE WHEN GENDER = ''',
GENDER,
''' then 1 ELSE 0 end) AS ',
GENDER
)
) INTO @sql
FROM Population;
SET @sql = CONCAT('SELECT CITY, ', @sql, '
FROM Population
GROUP BY City');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.