SQL查询使用distinct

时间:2009-11-29 10:12:18

标签: sql-server

你好,我有一个具有以下结构的表:

sku, category, brand, product_name, inventory_count

包含以下数据:

1001, car, honda, "honda car 1", 5
1002, truck, honda, "honda truck 1", 6
1003, car, ford, "ford car 1", 7
1004, truck, ford, "ford truck 1", 8
1005, bike, honda, "honda bike 5", 9
1006, bike, ford, "ford bike 6", 10

我正在使用以下SQL查询

select distinct category from products

这将返回以下内容:

car
truck
bike

这很有效,

现在我想为每个具有最大INVENTORY_COUNT的类别提供一个产品示例

以便将数据返回为:

car, "ford car 1"
truck, "ford truck 1"
bike, "ford bike 6"

我将运行什么SQL查询来获取该数据?

我希望每个类别的商品具有更大的INVENTORY_COUNT

谢谢!

3 个答案:

答案 0 :(得分:4)

SELECT category, MAX(product_name)
FROM table
GROUP BY
  category

答案 1 :(得分:1)

即使你可以尝试这个(Sql Server 2005 +)

select x.category,x.product_name from(
select ROW_NUMBER() over(partition by category order by product_name) rn,
t.* from @t t) x
where x.rn = 1

**category         product_name**

bike                ford bike 6
car              ford car 1
truck              ford truck 1

如果您使用x.rn = 2,则输出为

category         product_name
bike             honda bike 5
car           honda car 1
truck           honda truck 1

答案 2 :(得分:1)

从名称inventory_count判断我假设该值不是唯一的,因此该类别中可能有多个具有相同计数的产品。因此,您不能将计数用作连接中的标识符,因此您需要一个子查询将结果限制为单个项目。

select
  p.category,
  product_name = (
    select top 1 n.product_name
    from products n
    where n.category = p.category
    order by n.inventory_count desc
  )
from products p
group by p.category