嗨,我在尝试达到 3 的值时遇到问题,因为我的查询无法识别使用子句"IN"选择的两个国家/地区
a( 这是我的简单表格来源:
ID | 国家
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
阿拉伯数字
您似乎想要以下内容:
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
则输出为3
,否则如果只有'CL'
存在输出为1
,否则如果仅存在'BR'
输出为2
,否则输出为0
。
案例 ...END 表达式使用快捷计算:
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
第一个版本返回 value=compare_value 的结果。这 第二个版本返回第一个条件的结果,即 没错。如果没有匹配的结果值,则 ELSE 之后的结果是 返回,如果没有 ELSE 部分,则为 NULL。
您键入查询的逻辑设计得不好!首先,您需要连接国家/地区字段,然后输入大小写表达式。
从国家/地区中选择GROUP_CONCAT(国家/地区(
你会得到以下结果">BR,CL,...">
然后你把 case 表达式放成这样:
选择结果像"%CL%"然后为 1 的情况
当结果像"%BR%"时,则为 2 当结果像"%BR%"和结果像"%CL%"时,则 3 否则 0从(从国家/地区中选择GROUP_CONCAT(国家((