Как мне найти наименьшее значение из каждой группы в sql?

#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
;
 

видеть: