我尝试在 mysql 'CASE WHEN' 条件下使用 IN
I try to use IN in mysql 'CASE WHEN' condition
您好,我在尝试达到值 3 时遇到问题,因为我的查询无法识别使用 'IN'
子句选择的两个国家
a) 这是我的简单 table 来源:
编号 |国家
1 | CL
2 | BR
b) 这是我的 sql 查询:
SELECT
(
CASE
WHEN country ='CL' THEN 1
WHEN country = 'BR' THEN 2
WHEN country IN ('BR','CL') THEN 3
ELSE 0
END) AS result
FROM countries
WHERE country IN ('BR','CL') ;
c) 这是当前的输出结果:
结果
1
2
CASE ... END expression使用快捷求值:
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
The first version returns the result where value=compare_value. The
second version returns the result for the first condition that is
true. If there was no matching result value, the result after ELSE is
returned, or NULL if there is no ELSE part.
您似乎想要如下内容:
SELECT CASE
WHEN cntAll = 2 THEN 3
WHEN cntCL >= 1 THEN 1
WHEN cntBR >= 1 THEN 2
ELSE 0
END AS result
FROM (
SELECT COUNT(DISTINCT country) AS cntAll,
COUNT(CASE WHEN country = 'CL' THEN 1 END) AS cntCL,
COUNT(CASE WHEN country = 'BR' THEN 1 END) AS cntBR
FROM countries
WHERE country IN ('CL', 'BR')) AS t
当 ('CL', 'BR')
值都存在于 countries
table 时,则输出为 3
,否则如果只有 'CL'
存在时输出为 1
,否则如果只有 'BR'
存在则输出为 2
,否则输出为 0
.
您输入查询的逻辑设计不当!
首先,您需要连接国家字段,然后放入大小写表达式。
select GROUP_CONCAT(国家)来自国家
您将得到以下结果“BR,CL,...”
然后你把 case 表达式写成这样:
select
结果类似于 '%CL%' THEN 1
的情况
当结果类似于“%BR%”时 THEN 2
当结果像 '%BR%' 和结果像 '%CL%' THEN 3
否则 0
从
(select GROUP_CONCAT(国家/地区)来自国家/地区)
您好,我在尝试达到值 3 时遇到问题,因为我的查询无法识别使用 'IN'
子句选择的两个国家a) 这是我的简单 table 来源:
编号 |国家
1 | CL
2 | BR
b) 这是我的 sql 查询:
SELECT
(
CASE
WHEN country ='CL' THEN 1
WHEN country = 'BR' THEN 2
WHEN country IN ('BR','CL') THEN 3
ELSE 0
END) AS result
FROM countries
WHERE country IN ('BR','CL') ;
c) 这是当前的输出结果:
结果
1
2
CASE ... END expression使用快捷求值:
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
The first version returns the result where value=compare_value. The second version returns the result for the first condition that is true. If there was no matching result value, the result after ELSE is returned, or NULL if there is no ELSE part.
您似乎想要如下内容:
SELECT CASE
WHEN cntAll = 2 THEN 3
WHEN cntCL >= 1 THEN 1
WHEN cntBR >= 1 THEN 2
ELSE 0
END AS result
FROM (
SELECT COUNT(DISTINCT country) AS cntAll,
COUNT(CASE WHEN country = 'CL' THEN 1 END) AS cntCL,
COUNT(CASE WHEN country = 'BR' THEN 1 END) AS cntBR
FROM countries
WHERE country IN ('CL', 'BR')) AS t
当 ('CL', 'BR')
值都存在于 countries
table 时,则输出为 3
,否则如果只有 'CL'
存在时输出为 1
,否则如果只有 'BR'
存在则输出为 2
,否则输出为 0
.
您输入查询的逻辑设计不当! 首先,您需要连接国家字段,然后放入大小写表达式。
select GROUP_CONCAT(国家)来自国家
您将得到以下结果“BR,CL,...”
然后你把 case 表达式写成这样:
select 结果类似于 '%CL%' THEN 1
的情况当结果类似于“%BR%”时 THEN 2 当结果像 '%BR%' 和结果像 '%CL%' THEN 3 否则 0 从 (select GROUP_CONCAT(国家/地区)来自国家/地区)