J'ai le tableau suivant la tenue de l'argent virtuel pour les tournois hebdomadaires:PostgreSQL: comment trouver id avec de l'argent max dans une table hebdomadaire
# select * from pref_money limit 5;
id | money | yw
----------------+-------+---------
OK32378280203 | -27 | 2010-44
OK274037315447 | -56 | 2010-44
OK19644992852 | 8 | 2010-44
OK21807961329 | 114 | 2010-44
FB1845091917 | 774 | 2010-44
(5 rows)
Dans mes utilisateurs liste script PHP, je dois savoir qui a été gagnant hebdomadaire, de sorte que je peux montrer des médailles près de leurs noms. J'essaie donc cette instruction SQL:
# find the weekly winners
$sth = $db->prepare('select id from pref_money
where money in
(select max(money) from pref_money group by yw)');
$sth->execute();
while ($row = $sth->fetch(PDO::FETCH_ASSOC))
@$medals[$row['id']]++;
Cela fonctionne la plupart du temps, mais parfois j'obtenir faux positifs, lorsqu'un utilisateur arrive à avoir la même quantité d'argent dans une semaine (mais pas là max) comme le gagnant dans une autre semaine.
Quelqu'un a-t-il une idée sur la façon de changer l'instruction SQL, de sorte que seuls les identifiants gagnants sont réellement sélectionnés?
Lorsque je tente ce qui suit, je reçois une erreur:
# select id, max(money) from pref_money group by yw;
ERROR: column "pref_money.id" must appear in the
GROUP BY clause or be used in an aggregate function
Merci! Alex
MISE À JOUR: PostgreSQL 8.4.5/CentOS et il peut y avoir des liens :-)
+1: Battez-moi de 6 secondes! –
Merci, mais le 2ème code ne fonctionne pas vraiment - affiche toutes les lignes de la table pref_money –
oups ... essayant de le ranger brisé la condition de jointure. – araqnid