我有一张桌子:
price
---------------------
id | int (PK)
unit_price | number
part_id | int (FK)
line | int
在part_id
和line
上设置了一个唯一约束(因此部分可以通过"行&#34来区分多个价格;)
要想象:
id | unit_price | part_id | line
--------------------------------
1 | 100.00 | 1 | 1
2 | 150.00 | 1 | 2
3 | 90.00 | 1 | 3
--------------------------------
4 | 75.00 | 2 | 1
5 | 70.00 | 2 | 2
--------------------------------
6 | 90.00 | 3 | 1
7 | 95.00 | 3 | 2
我需要编写一个查询,该查询将采用最低'行'对于每个部分并显示价格,因此输出将是:
id | unit_price | part_id | line
--------------------------------
1 | 100.00 | 1 | 1
4 | 75.00 | 2 | 1
6 | 90.00 | 3 | 1
我从这个问题开始:
SELECT min(line), unit_price, part_id
FROM price
GROUP BY ... ?
但我很快意识到,如果我将unit_price
和part_id
添加到GROUP BY
子句中,那么它基本上会给我原始输出(所有内容),因为每个unit_price
是独特的。但我不能GROUP BY part_id
本身,因为unit_price
条款需要包含GROUP BY
。
我是否应该使用汇总min
函数仅为part_id
选择一个行?我想我可能会用GROUP BY
咆哮错误的树。我只在问题中提出它来展示我尝试过的事情。
在我的数据集中,并非所有价格都保证以' 1'开头,因此= 1
条件不起作用。我需要最低限度。此外,我使用的是MySQL,但我认为这也许并不重要。
答案 0 :(得分:2)
以下是使用join
和使用min
的子查询的常见方法:
select p.id, p.unit_price, p.part_id, p.line
from price p join (
select part_id, min(line) as line
from price
group by part_id
) t on p.part_id = t.part_id and p.line = t.line
答案 1 :(得分:0)
请使用以下查询
查询: -
select p1.* from price as p1
where p1.id = ( select p2.id from price as p2
where p2.part_id = p1.part_id
order by p2.line asc limit 0,1)
group by p1.id