SQL,如果条件为真,则仅计数一次

时间:2018-08-29 17:20:59

标签: mysql sql

我有一个包含三列的表:名称,国家/地区和价格,我需要一个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并且所在国家/地区相同,我不想多次计算交易量。这有可能吗?谢谢

2 个答案:

答案 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