SQL-如何从具有其他条件的值中选择最小值?

问题描述 投票:0回答:2

我需要找到公司(CompanyName)提供的产品(ProductName),其名称'开头为字母'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 Asc,但是(!)我稍后需要进行联合(也选择最昂贵的产品),显然ORDER BY与UNION不兼容。

很抱歉,如果代码不是最好的-我是SQL新手。谢谢您的时间!

sql union where-clause min
2个回答
0
投票

尽管还有其他方法,但您正在寻找的是相关子句:

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

0
投票
    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'
)
    )
© www.soinside.com 2019 - 2024. All rights reserved.