返回不同行中具有特定值的所有行

时间:2019-03-12 13:28:47

标签: mysql sql group-by where having

我有一个看起来像这样的桌子

Time            Master_Price    Discounted_price1   Discounted_qty1 Discounted_price2   Discounted_qty2 Discounted_price3   Discounted_qty3
1552279758      100                     90                  5               80                  10              70              15
1552279759      200                     195                 6               185                 7               80              12
1552279760      300                     285                 11              200                 9               150             7
1552279761      400                     300                 20              250                 25              220             30
1552279763      500                     400                 30              350                 5               300             8
1552279766      500                     400                 NULL            350                 9               300             9

“时间”列是唯一的,采用Unix格式。

要求是在Master_Price列上使用算术运算,并检查与之匹配的Discounted Price,并返回相应的Discounted Qty。

假设Master_Price为100,而我输入Master_Price-20,则应返回值12(在第二行中显示)或整行。 如果Master_Price为200,而我输入Master_Price-50,则应返回值7(出现在第三行)或整行,依此类推。 如果Master_Price为500,而我输入Master_Price-100,则它应返回30或整行,而不是包含NULL的行

输入要从Master_Price中减去的整数的选项应在查询中。即使是硬编码也可以

1 个答案:

答案 0 :(得分:0)

请参阅上面的评论,但我认为此查询应该有效:

(如果找不到,则不会获得整行。)

select @MP := 500;
select @DISCOUNT := 100;
select 
CASE
    WHEN Discounted_price1 = Master_Price - @DISCOUNT THEN Discounted_qty1 
    WHEN Discounted_price2 = Master_Price - @DISCOUNT THEN Discounted_qty2 
    WHEN Discounted_price3 = Master_Price - @DISCOUNT THEN Discounted_qty3 
ELSE 'None'
END as qty
from prices where Master_Price = @MP and ((Discounted_price1 = Master_Price - @DISCOUNT and Discounted_qty1 >=0) or (Discounted_price2 = Master_Price - @DISCOUNT and Discounted_qty2 >=0) or (Discounted_price3 = Master_Price - @DISCOUNT  and Discounted_qty3 >=0));

我做了一个小提琴来演示/玩它。 http://sqlfiddle.com/#!9/0166cc/16