Zapytanie do bazy - zadanie

0

Witam,
mam zadanie do zrobienia, a mianowicie:

Znaleźć produkty o cenach najniższych w swoich kategoriach

Wygląd tabel:
user image

No i nie mam pojęcia jak to zrobić. Doszedłem tylko do czegoś takiego:

select ProductName, CategoryName
from dbo.Products inner join dbo.Categories
on dbo.Products.CategoryID = dbo.Categories.CategoryID
where UnitPrice in (select min(UnitPrice)
    from dbo.Products inner join dbo.Categories
    on dbo.Products.CategoryID = dbo.Categories.CategoryID
    group by CategoryName)

Ale nie wiem co dalej, żeby wyszukać cenę tylko dla danej kategorii a nie wszystkich.

0

Coś za bardzo zakombinowałeś, jak potrzebujesz tylko pierwszy z rekord z brzegu to masz zawsze SELECT TOP 1, jak posortujesz to będzie wybierało najmniejszy/największy według jakiegoś kryterium. Ale po przeczytaniu całego posta w sumie nie jestem pewien co chcesz osiągnąć.

0
Xiuthechutli napisał(a):

Coś za bardzo zakombinowałeś, jak potrzebujesz tylko pierwszy z rekord z brzegu to masz zawsze SELECT TOP 1, jak posortujesz to będzie wybierało najmniejszy/największy według jakiegoś kryterium. Ale po przeczytaniu całego posta w sumie nie jestem pewien co chcesz osiągnąć.

Wykładowca dał trochę niejasne polecenie, ale wychodzi na to, że trzeba znaleźć nazwę produktu o najniższej cenie w danej kategorii. Tzn dla każdej kategorii znaleźć nazwę produktu o najniższej cenie.

Widzę bez problemu rozwiązanie przy użyciu pętli:
Ale jak to zrobić w 1 select bez pętli to nie mam pojęcia.

user image

0

Szczerze wątpię, żeby wykładowca chciał to co zrobiłeś na screenie :)
Raczej pod:

Znaleźć produkty o cenach najniższych w swoich kategoriach
rozumiem otrzymanie wyniku jaki już udało Ci się uzyskać, czyli:
Produkt | Kategoria
---------------- | ----------------
jabłka | owoce
marchewka | warzywa

0
SELECT p.* FROM Products p JOIN (SELECT categoryid, Min(unitPrice) price FROM Products GROUP BY 1) x ON p.CategoryId=x.categoryid AND x.price=p.UnitPrice

1 użytkowników online, w tym zalogowanych: 0, gości: 1