[英]Mysql how to use IN with IF in where clause?
我想要這樣的東西:
SELECT
p.name_en AS 'province_$lang',
p.province_code AS 'province_code_$lang',
COUNT(u.id) AS 'total_$lang',
COUNT(u.id) AS total
FROM applications AS a
LEFT JOIN users AS u on u.id = a.user_id
LEFT JOIN provinces AS p on p.province_code = u.province_code
WHERE a.progress_status IN (0,1,2,3) AND IF( a.progress_status = 2,a.denial_type ,1) IN IF(a.`progress_status` = 2,(1,2,3),1)
GROUP BY u.province_code
假設我在表中有兩個字段,其中一個是progress_status
,可以具有這些0,1,2, or 3
值之一,另一個字段denial_type
可以具有1,2, or 3
,但是denial_type
僅可以采用這些值之一當progress_status
為2時的值。所以我想檢查一下progress_status
是否為IN
0、1,2、3,對於那些記錄,其progress_status
為2,則其denial_type
應該為IN
1,2,3。
嘗試這個:
SELECT
p.name_en AS 'province_$lang',
p.province_code AS 'province_code_$lang',
COUNT(u.id) AS 'total_$lang',
COUNT(u.id) AS total
FROM applications AS a
LEFT JOIN users AS u on u.id = a.user_id
LEFT JOIN provinces AS p on p.province_code = u.province_code
WHERE a.progress_status IN (0,1,2,3) AND
IF( a.progress_status = 2,
(select denial_type from applications where denial_type IN (1,2,3)) ,1)
GROUP BY u.province_code
在IF
條件下使用subquery
僅選擇那些值為IN (1,2,3)
denial_type
可能會解決您的問題。
希望能幫助到你!
聚合后過濾應該可以解決問題
SELECT
p.name_en AS 'province_$lang',
p.province_code AS 'province_code_$lang',
COUNT(u.id) AS 'total_$lang',
COUNT(u.id) AS total
FROM applications AS a
LEFT JOIN users AS u on u.id = a.user_id
LEFT JOIN provinces AS p on p.province_code = u.province_code
GROUP BY u.province_code
HAVING SUM(a.progress_status IN (0,1,2,3))>0
AND SUM(a.progress_status = 2 AND a.denial_type IN(1,2,3))>0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.