MySQL,执行查询以选择和过滤结果

时间:2018-10-06 14:06:49

标签: mysql sql database

我有一个具有以下结构的表:

id          seller          class           ref             color       pricekg

1           manta           apple           apple-red       red         0.147
2           manta           pear            pear-green      green       0.122
3           poma            apple           apple-red       red         0.111
4           arnie           melon           melon-green     green       0.889
5           pinas           pineapple       pinneaple-brown brown       0.890
6           gordon          apple           apple-red       red         0.135

我需要从一些卖家那里得到一些成果,并且有一些偏好。

我的第一个目标是知道谁卖了我要寻找的东西,然后我知道了,选择最好的那个。

当我执行第一个查询时,我得到以下信息:

查询->

SELECT *  
FROM  `fruits`   
WHERE  `seller`  
IN ("manta",  "poma",  "pinas",  "gordon")  
AND  `class` IN ("apple",  "pineapple")  
ORDER BY id  

结果1->

1           manta           apple           apple-red       red         0.147
3           poma            apple           apple-red       red         0.111
5           pinas           pineapple       pinneaple-brown brown       0.890
6           gordon          apple           apple-red       red         0.135

到目前为止,还不错,但是我得到了3位卖家的红苹果代言人。

现在这是我无法解决的部分...

有了这个结果,我想过滤掉重复的苹果裁判(因为我想从一位卖家那里购买)。

如果有重复项,请选择带有卖方蝠ta的重复项。

如果有重复项,并且没有一个是卖方蝠ta,则选择每公斤成本最低的重复项。

因此,在结果1之后,第二个查询(或子查询,或者是否有一种方法可以在一个查询中完成所有操作,但我真的不知道哪种方法是最好的),预期结果将是:

1           manta           apple           apple-red       red         0.147
5           pinas           pineapple       pinneaple-brown brown       0.890

或者如果manta不卖这些,那就是:

3           poma            apple           apple-red       red         0.111
5           pinas           pineapple       pinneaple-brown brown       0.890

是否可以只执行一个查询? 或者我可以以某种方式从结果或时态表中进行查看,然后再执行一次查询以过滤重复项。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

这是优先级查询。

我想你想要

select f.*  
from fruits f
where f.seller in ('manta', 'poma', 'pinas', 'gordon') and 
      f.class in ('apple', 'pineapple') and
      f.id = (select f2.id
              from fruits f2
              where f2.seller in ('manta', 'poma', 'pinas', 'gordon') and 
                    f2.class in ('apple', 'pineapple') and
                    f2.ref = f.ref
              order by (f2.seller = 'manta') desc,  -- put manta sellers first
                       f2.price asc                 -- then order by lowest price
              limit 1
             );