Ceci devrait fonctionner pour vous. S'il ne répond pas à vos exigences, affichez ce dont vous avez besoin. Votre désir originel était d'avoir 25, donc vous devriez modifier simplement la dernière clause soit HAVING COUNT(*) <= 25
SELECT a.item,
a.category,
a.inventorycount,
COUNT(*) AS ranknumber
FROM inv AS a
INNER JOIN inv AS b
ON (a.category = b.category)
AND (a.inventorycount <= b.inventorycount)
GROUP BY a.category,
a.item,
a.inventorycount
HAVING COUNT(*) <= 2
ORDER BY a.category, COUNT(*) DESC
Si vous voulez sélectionner plusieurs colonnes de la table, ajoutez simplement au SELECT
et `GROUP BY » clauses. Lorsque vous souhaitez développer le «TOP n pour chaque catégorie, foo, bar», vous devez ajouter ces colonnes à la clause INNER JOIN
.
--show the top 2 items for each category and year.
SELECT a.item,
a.category,
a.year,
a.inventorycount,
COUNT(*) AS ranknumber
FROM inv AS a
INNER JOIN inv AS b
ON (a.category = b.category)
AND (a.year = b.year)
AND (a.inventorycount <= b.inventorycount)
GROUP BY a.category, a.item, a.year, a.inventorycount
HAVING COUNT(*) <= 2
ORDER BY a.year, a.category, COUNT(*) DESC
Merci! ça a merveilleusement bien fonctionné! Je sais que je demande beaucoup mais je dis que j'ai ajouté deux autres colonnes: Lieu et année. Serait-il possible dans la même requête de regrouper les 2 catégories principales par emplacement et par année? – Rick
Lorsque j'ajoute "ON (a.year = b.year)", j'obtiens une erreur de syntaxe. – Rick
@Rick: c'était une erreur de copier/coller. Devrait être 'AND'. Corrigé ci-dessus. –