9
votes

max (), groupe par et commander par

J'ai suivi de l'instruction SQL.

    SELECT t.client_id,max(t.points) AS "max" FROM sessions GROUP BY t.client_id;


0 commentaires

3 Réponses :


9
votes
SELECT t.client_id, max(t.points) AS "max" 
FROM sessions t
GROUP BY t.client_id 
order by max(t.points) desc

3 commentaires

Merci pour une réponse rapide. Je viens de comprendre que la colonne de points était en fait du caractère varié (), donc j'ai utilisé la fonction_number et que cela fonctionne maintenant.


Pourquoi n'utilisez-vous pas le bon de données de votre table? Cela accélérera également la requête, créez un index sur cette colonne et la requête sera plus rapide. Un index sur un Varchar ne fonctionnera pas lorsque vous avez besoin d'un numéro.


Désolé, je n'ai pas créé ce tableau et je n'ai aucun droit de changer sa structure. Il suffit d'écrire un logiciel pour le CRM existant. Je vais dire à l'administrateur de changer cela.



0
votes

Puisque vous avez étiqueté comme postgres : Postgres permet un non standard groupe par et commander par Colonne numéro. Donc, vous pourriez avoir xxx

après analyse, il est identique à la solution de RedFilter.


0 commentaires

2
votes

Il n'est pas tout à fait correct que les valeurs de la liste SELECT sont interdites dans les clauses suivantes. En fait, Commander par est traité logiquement après la liste SELECT et peut-on faire référence à Sélectionner des noms de résultats Liste (en contraste avec groupe par ). Donc, la façon habituelle d'écrire votre requête serait xxx

de cette façon d'exprimer qu'il est SQL-92 et devrait être très portable. L'autre moyen de le faire est par numéro de colonne, par exemple xxx

Ce sont les deux seules façons de le faire dans SQL-92.

SQL : 1999 et ensuite permettent également de faire référence à des expressions arbitraires dans la liste de tri, de sorte que vous pourriez simplement faire commander par max (t.points) , mais c'est clairement plus lourd, éventuellement moins portable. La commande par numéro de colonne a été supprimée dans SQL: 1999, il n'est donc plus techniquement plus standard, mais probablement toujours largement supporté.


0 commentaires