SQL - Как выбрать наименьшее значение из значений с другим условием? - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно найти продукты (ProductName), поставляемые компаниями (CompanyName), названия которых начинаются с букв «a» и «g», а затем показывают самый дешевый (UnitPrice). Я пытался найти ответ, но, похоже, не могу понять его правильно - мне кажется, я просто нахожу общее минимальное значение, а не минимальное значение из уже выбранных продуктов. Я был бы очень признателен за помощь и некоторые объяснения!

Код, который просто выбирает продукты на основе названия компании:

SELECT
    'The cheapest' ttype,
    p.ProductName, 
    s.CompanyName, 
    c.CategoryName,
    p.UnitPrice
FROM
    dbo.Products p
INNER JOIN
    dbo.Categories c
    ON
    c.CategoryID = p.CategoryID
INNER JOIN
    dbo.Suppliers s
    ON
    s.SupplierID = p.SupplierID
WHERE
    SUBSTRING(CompanyName, 1, 1) > 'a' and SUBSTRING(CompanyName, 1, 1) < 'g'

Пробный:

    AND
    UnitPrice = (
        SELECT
            MIN(UnitPrice)
        FROM
            Products
    )

и:

NOT EXISTS (SELECT 1 FROM Products pr WHERE pr.UnitPrice < p.UnitPrice)

и с помощью SELECT TOP 1 [...] ORDER BY UnitPrice As c, однако (!) Мне нужно сделать объединение позже (выберите также самый дорогой продукт), а ORDER BY не делает Видимо, я не работаю с UNION.

Извините, если код не лучший - я новичок в SQL. Спасибо за ваше время!

Ответы [ 2 ]

1 голос
/ 10 апреля 2020
    AND
    UnitPrice = (
        SELECT
            MIN(UnitPrice)
FROM
    dbo.Products p
INNER JOIN
    dbo.Categories c
    ON
    c.CategoryID = p.CategoryID
INNER JOIN
    dbo.Suppliers s
    ON
    s.SupplierID = p.SupplierID
WHERE
    SUBSTRING(CompanyName, 1, 1) >= 'a' and SUBSTRING(CompanyName, 1, 1) =< 'g'
)
0 голосов
/ 10 апреля 2020

Хотя есть и другие способы, вы ищете предложение о корреляции:

UnitPrice = (SELECT MIN(p2.UnitPrice)
             FROM Products p2
             WHERE p2.ProductName = p.ProductName
            )
...