2009-11-29 6 views
0

bonjour j'ai une table avec la structure suivante:requête SQL en utilisant distinctes

sku, category, brand, product_name, inventory_count 

avec les données suivantes:

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 

J'utilise la requête SQL suivante

select distinct category from products 

cela retournera ce qui suit:

car 
truck 
bike 

Cela fonctionne très bien,

Maintenant, je veux obtenir un exemple de produit pour chacune des catégories avec le plus grand INVENTORY_COUNT

afin qu'il retourne les données:

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

ce Requête SQL est-ce que je courrais pour obtenir ces données ??

je veux l'élément le plus INVENTORY_COUNT pour chaque catégorie

merci !!

Répondre

4
SELECT category, MAX(product_name) 
FROM table 
GROUP BY 
    category 
+0

cela semble fonctionner merci! – duro

+0

si j'avais un autre champ nommé "INVENTORY_COUNT" qui était un numéro comment ajouterais-je dans cet ordre par inventory_count afin qu'il tire la ligne avec le plus grand INVENTORY_COUNT ?? – duro

+0

i essayé: catégorie SELECT, MAX (product_name) FROM table GROUP BY catégorie par ordre inventory_count mais cela ne fonctionne pas :( – duro

1

Même vous pouvez essayer (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 

Si u = 2 utiliser x.rn la sortie est

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

je n'ai pas la fonction ROW_NUMBER() donc je. suppose que je n'ai pas SQL Server 2005 + :( – duro

1

A en juger par le nom inventory_count Je suppose que la valeur n'est pas unique, donc il pourrait y avoir plus d'un produit dans la catégorie avec le même nombre. Par conséquent, vous ne pouvez pas utiliser le compte comme identifiant dans une jointure. Vous avez donc besoin d'une sous-requête qui limite le résultat à un seul élément.

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 
Questions connexes