#sql
Вопрос:
У меня есть 2 стола:
Продукт:
Group_id Product_id Size
------------------------------
A 123 s
B 342 xs
A 654 m
A 952 L
B 853 s
B 134 m
Код размера:
Size Size_code
----------------
xs 1
s 2
m 3
L 4
Я хочу найти продукт наименьшего размера из каждой группы продуктов
Результат должен выглядеть так:
Group_id Product_id Size
----------------------------
A 123 s
B 342 xs
Как написать это в SQL? Спасибо!
Комментарии:
1. Пожалуйста, отметьте свой вопрос в базе данных, которую вы используете.
Ответ №1:
Предполагая, что size_code
у вас есть заказ, вы можете использовать row_number()
:
select p.*
from (select p.*,
row_number() over (partition by p.group_id order by s.size_code asc) as seqnum
from product p join
size_code s
on p.size = s.size
) p
where seqnum = 1;
Ответ №2:
В SQL (без предположений):
SELECT p.*
FROM Product p
INNER JOIN Size_Code s ON s.Size = p.Size
INNER JOIN (
SELECT
p.Group_id,
min(s.Size_code) as Size_code
FROM Product p
INNER JOIN Size_Code s ON s.Size = p.Size
GROUP BY
p.Group_id
) x on x.Group_id = p.Group_Id AND x.Size_code = s.Size_code
;
видеть: