我有一个包含三列的表:名称,国家/地区和价格,我需要一个SQL
查询,该查询将创建名为Qualify的第四Boolean
列。如果Price <100,且没有其他行的价格<100,且同一国家/地区,则此列必须为true。
示例:
Name - Country- Price- Qualify
Daniel - ES - 98 - TRUE
John - PT - 45 - TRUE
Maria - UK - 102 - FALSE
Anna - PT - 31 - FALSE (because there is already a row with PT and Price<100)
Joseph - UK - 25 - TRUE
Miriam -DK - 105 - FALSE
所有这一切是因为如果价格低于100并且所在国家/地区相同,我不想多次计算交易量。这有可能吗?谢谢
答案 0 :(得分:2)
思考exists
。在MySQL中,您甚至不需要case
表达式:
select t.*,
(t.price < 100 and
not exists (select 1
from t t2
where t2.country = t.country and t2.name <> t.name and t2.price < 100
)
) as flag
from t;
这假设name
至少在国家/地区方面是唯一的。
答案 1 :(得分:0)
只需使用CASE语句提供另一个选项:
Select
@row_number:=CASE
WHEN @country = Country AND Price < 100 AND @price < 100
THEN 1
ELSE 0 END AS Qualify,
@country:= Country As Country,
@price:= Price As Price
FROM
Test
ORDER BY Country, Price
这里是demo