我有以下示例数据的MySQL表:
create table prices (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
store_id INTEGER NOT NULL,
item INTEGER NOT NULL,
price FLOAT NOT NULL
);
insert into prices values(1,1,1,1.25);
insert into prices values(2,1,2,.99);
insert into prices values(3,2,2,1.20);
insert into prices values(4,3,3,3.25);
insert into prices values(5,3,1,1.35);
我正在寻找一个查询,以选择公司不用于购买产品的任何store_id
。例如,在prices
中,将不会使用store_id
2,因为可以从item
1便宜地购买store_id
2。
我将如何处理?谢谢。
答案 0 :(得分:2)
使用此查询:
select item, min(price) minprice
from prices
group by item
您将获得每件商品的最低价格。
如果您对上面的查询left join
表prices
select p.*
from prices p left join (
select item, min(price) minprice
from prices
group by item
) g on g.item = p.item and g.minprice = p.price
where g.item is null
并仅保留不匹配的行(表示该商品的价格没有最便宜的行),则将获得所有该商品的商店和商品可以发现更便宜:
| id | store_id | item | price |
| --- | -------- | ---- | ----- |
| 3 | 2 | 2 | 1.2 |
| 5 | 3 | 1 | 1.35 |
请参见demo。
结果:
select p.store_id
from prices p left join (
select item, min(price) minprice
from prices
group by item
) g on g.item = p.item and g.minprice = p.price
group by p.store_id
having sum(g.item is not null) = 0
如果您只想要从以下商店不买任何东西的商店:
| store_id |
| -------- |
| 2 |
请参见demo。
结果:
SELECT * FROM DATASET ORDER BY Timestamp desc Limit 100
答案 1 :(得分:0)
SELECT *, MIN(price) from prices group by item
为您提供商品最便宜的 store_id 。
示例输出:
id | store_id |项目|价格| MIN(价格)
1 | 1 | 1 | 1.25 | 1.25
2 | 1 | 2 | 0.99 | 0.99
4 | 3 | 3 | 3.25 | 3.25