2009-08-22 6 views
0

Je travaille avec une base de données MySQL version 5.0.41 (et PHP 5.2.6, bien que cela ne soit pas pertinent pour cette question).SQL - Comment utiliser SUM et MAX dans la même requête?

J'ai une table appelée votes avec les champs suivants: id, item_id, vote_value. Chaque fois qu'un utilisateur sur le site soumet un vote positif pour un élément, une nouvelle ligne est créée avec le item_id correspondant et un nombre positif (c'est-à-dire 1). Lorsque le vote est négatif, une ligne est créée avec le item_id correspondant et un nombre négatif (c'est-à-dire -1). Je voudrais sélectionner, avec une requête (si possible), l'item_id qui a le plus de votes. Pour ce faire, je dois d'abord résumer tous les votes pour chaque individu item_id (pour obtenir un nombre comme 38 ou -14), puis sélectionnez le maximum pour ce nombre. Je ne sais pas comment écrire la requête pour cela.

Pourriez-vous aider?

Merci!

+0

« le item_id qui a le plus de voix » signifie que l'élément qui a obtenu la note la plus élevée, non? – Zed

Répondre

3
SELECT item_id, SUM(vote_value) AS sum 
FROM votes 
GROUP BY item_id 
ORDER BY sum DESC 
LIMIT 1 
+0

merci !! quel est l'objectif de la clause GROUP BY ici? –

+0

Je pense que je l'ai compris. Sans la clause GROUP BY, le sql choisira simplement la somme la plus élevée des votes indépendamment de l'item_id (quel que soit l'élément auquel les votes appartiennent). Donc, si j'ai 20 voix pour un mot et 40 pour un autre, au lieu que la somme maximale soit de 40, elle apparaîtra comme 60 - puisque ce n'est pas le regroupement des votes par quoi que ce soit. Merci! –

1

Vous pouvez faire quelque chose comme:

SELECT item_id, SUM(vote_value) AS total, COUNT(id) AS c 
FROM votes 
GROUP BY item_id 
ORDER BY total DESC, c DESC 
LIMIT 1 
+0

merci! quel est le but de la sélection du nombre d'ID (c'est-à-dire COUNT (id))? –

+0

MAX devrait être SUM, et vous devriez également sélectionner l'item_id – Zed

+0

J'ai mal interprété votre question initiale en pensant que "nombre de votes" était une condition de départage si le SUM était le même. Si le nombre de votes est sans importance, le paramètre COUNT ne sert à rien dans cette requête. – VoteyDisciple

Questions connexes