2016-11-08 26 views
0

我有一個表命名爲「用戶」計數與空MySQL的枚舉值導致

user_id|Name|employment_type|gender 
------------------------------------ 
1  |ABC |salaried  |MALE 
2  |DEF |salaried  |Male 

employment_type =枚舉(「領工資」,「self_employed」)

我要計算行數有employment_type =工薪和self_employed。 在上面的例子中,我想造成這樣

employment_type | count 
----------------------- 
salaried  |2 
self_employed |0 

但我的查詢給我下面的結果

employment_type | count 
----------------------- 
salaried  |2 

我的查詢:

SELECT employment_type ,COUNT(employment_type) as "count" 
FROM users WHERE user_id IN(1,2) AND employment_type IN ("salaried","self_employed") GROUP BY employment_type 

請幫助我獲得期望的結果感謝

回答

1

你可以通過引入一個表來實現這一點,其中所有的employment types居住。

SELECT 
emp_type, 
COUNT(users.employment_type) AS count 
FROM 
(
    SELECT "salaried" AS emp_type 
    UNION 
    SELECT "self_employed" 
) AS empTypeTable 
LEFT JOIN users ON users.employment_type = empTypeTable.emp_type 
    AND 
    user_id IN (1, 2) 
    AND 
    employment_type IN (
     "salaried", 
     "self_employed" 
    ) 
GROUP BY 
    empTypeTable.emp_type; 

然後用LEFT JOIN幫助下,你會得到導致所有就業類型。

0

對於這種特殊情況下(一個明確的數量,低數爲employment_type選項),你可以做到以下幾點:

SELECT SUM(qty), employment_type FROM (
    SELECT COUNT(0) AS qty, employment_type FROM users WHERE user_id IN(1,2) AND employment_type IN ("salaried","self_employed") GROUP BY employment_type 
    UNION 
    SELECT 0 AS qty, "salaried" AS employment_type 
    UNION 
    SELECT 0 AS qty, "self_employed" AS employment_type 
) t 
GROUP BY employment_type ; 

訣竅是使用類似「輔助表」,它由單一選擇的語句 - 通過聯合來加入它們,然後在表格和單個語句上進行分組。