SQL - сравнение значений - PullRequest
       2

SQL - сравнение значений

1 голос
/ 07 октября 2019

Мне снова нужна твоя помощь. Вот мой SQL-запрос:

SELECT sp.pro_ID, description, price, sp.sup_ID
  FROM L4_Sup_Pro sp, L4_Products prod
 WHERE prod.our_id = sp.pro_id
   AND (sp.sup_ID = '23' OR sp.sup_ID = '75')
 ORDER BY sp.pro_ID;

И этот запрос дает мне такой результат:

enter image description here

Мне нужно сравнить ценыSUP_ID столбец, имеющий значения 75 и 23, и отображение самой дешевой цены . Таким образом, вывод будет:

PRO_ID  DESCRIPTION       PRICE   SUP_ID
101     Laser Printer     630     23
121     Color Jet Printer 223     23
302     Scanner           399     75

Ответы [ 4 ]

1 голос
/ 07 октября 2019

Вы можете использовать ROW_NUMBER() аналитическую функцию

SELECT pro_ID, description, price, sup_ID
 FROM
 (
  SELECT sp.pro_ID, description, price, sp.sup_ID,
         ROW_NUMBER() OVER (PARTITION BY description ORDER BY price ) as rn
    FROM L4_Sup_Pro sp
    JOIN L4_Products prod
      ON prod.our_id = sp.pro_id
   WHERE sp.sup_ID in (23,75) -- without quotes by considering SUP_ID is a numeric column
  )
 WHERE rn = 1
 ORDER BY pro_ID

Демо

0 голосов
/ 07 октября 2019

Вам просто нужна группа с

    SELECT sp.pro_ID, description, 
      min(price) , min(sp.sup_ID) 
      FROM L4_Sup_Pro sp, L4_Products 
        prod
     WHERE prod.our_id = sp.pro_id AND
  (sp.sup_ID = '23' OR sp.sup_ID = '75')
    Group by s.pro_id,description having 
      1= 
     Max(case when price=min(price) 
          then 1 
      else 0 end)
      ORDER BY sp.pro_ID;
0 голосов
/ 07 октября 2019

Один метод агрегации:

SELECT sp.pro_ID, description,
       MIN(price), 
       MIN(sp.sup_ID) KEEP (DENSE_RANK FIRST ORDER BY price) as min_sup_ID
FROM L4_Sup_Pro sp JOIN
     L4_Products prod
     ON prod.our_id = sp.pro_id AND
WHERE sp.sup_ID IN (23, 75)   -- looks like a number so I dropped the quotes
GROUP BY p.pro_ID, description
0 голосов
/ 07 октября 2019

Исходя из описания столбцов и цены, хранящейся на L4_Products, вы можете попробовать запрос ниже -

SELECT sp.pro_ID, prod.description, prod.price, sp.sup_ID
FROM L4_Sup_Pro sp
JOIN (SELECT our_id, description, MIN(price) price
      FROM L4_Product
      GROUP BY our_id, description) prod ON prod.our_id = sp.pro_id
WHERE sp.sup_ID = '23'
OR sp.sup_ID = '75'
ORDER BY sp.pro_ID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...