J'ai deux tables - résultats et candidats. table Résultat cointainsJOIN, ORDER BY et GROUP BY dans la même déclaration
- result_id (PK)
- resul_contestant (qui a marqué cette)
- valeur (combien at-il marqué)
- result_discipline (où il a marqué cette)
participants cointains de table
- contestant_id (PK)
- CONTESTANT_NAME
- contestant_category
Ce que je veux faire est de sélectionner les résultats pour tous les candidats, mais je veux seulement montrer un résultat par concurrent - le plus élevé (le plus bas) un. Jusqu'à présent, je réussi à le faire:
SELECT * FROM contenstants
JOIN results ON result_contestant = contenstant_id
WHERE result_discipline = 1 AND contestant_category = 1
ORDER BY value DESC
GROUP BY contenstant_id;
Cependant, cela me donne erreur de syntaxe. Si je supprime la ligne GROUP BY, j'ai obtenu les résultats les plus élevés, mais si l'un des participants a marqué plus d'une fois dans cette discipline, j'ai obtenu tous ses scores.
Si je supprime la ligne ORDER BY, je n'ai qu'un seul résultat par participant, mais il renvoie le premier enregistrement en db, pas le plus élevé.
Comment faire pour que cette commande soit valide? De plus, il y a des disciplines less_is_better, où je veux le score le plus bas, mais pour autant que je puisse utiliser ORDER BY sur la requête finale, il faut le remplacer en remplaçant ASC par ASC. Merci.
J'ai commencé à donner une réponse ROW_NUMER(), mais j'ai ensuite réalisé que c'était MySQL, et je ne pense pas que MySQL ait encore cette fonction. Cependant, cela devrait vous indiquer la bonne direction. Voir aussi https://dba.stackexchange.com/questions/40130/mysql-and-window-functions – Shawn