当我在CASE语句中的THEN之后使用WHERE时,它会给出类似语法错误的错误,因此如何在CASE THEN中添加条件 示例:
SELECT CASE when sum(price)>5000 THEN price WHERE name LIKE %%
OR
SELECT case when sum(price)>5000 THEN price = SELECT price from products where name LIke %%
但是它会发出语法错误
答案 0 :(得分:2)
这里不允许使用。
尝试一下:
SELECT
CASE when sum(price) > 5000
THEN price
ELSE 'somethingElse' END
FROM
tableName
WHERE
name LIKE %%
或
SELECT
CASE when sum(price) > 5000 AND name LIKE %%
THEN price ELSE ... END
答案 1 :(得分:0)
此答案并非旨在解决此XY问题。
只需将其视为MySql语法实验即可。
允许在CASE语句中使用子查询。
但是该子查询必须仅返回1个结果值或不返回任何结果。
例如,以下测试代码段:
drop table if exists test;
create table test (name varchar(30), price int);
insert into test (name, price) values
('prod1', 1001)
, ('prod1', 1001)
, ('prod2', 2001), ('prod2', 2001), ('prod2', 2001)
, ('prod9999', 9999)
;
SELECT
name,
sum(price) as price,
(CASE
WHEN sum(price)>5000
THEN (select sum(price) from test where name like '%prod999%')
ELSE sum(price)
END) as price2
from test
group by name;
返回:
name price price2
prod1 2002 2002
prod2 6003 9999
prod9999 9999 9999
但是,不应使用这种方法。
该子查询将运行多次。
而且没有充分的理由,因为每次返回的值都是相同的。
在这种情况下,可以连接子查询。
SELECT
p.name,
sum(p.price) as price,
(CASE
WHEN sum(p.price)>5000
THEN sum(prod999.price)
ELSE sum(p.price)
END) as price2
from test p
cross join (select sum(price) as price from test where name like '%prod999%') as prod999
group by p.name
order by p.name;