J'ai trouvé que l'option "avec le rouleau" utilisé avec le groupe par est très utile. Mais cela ne se comporte pas avec la clause "ordre par".
Y a-t-il un moyen de commander à la manière dont je veux aussi bien que calculer les sous-totaux?
6 Réponses :
Essayez comme Utiliser une table temporaire
SELECT *
FROM
(
SELECT country, sum(id) as cnt
FROM mygroup GROUP BY country WITH rollup
) t
ORDER BY cnt;
La requête réelle a plusieurs colonnes du groupe par clause. L'utilisation de votre suggestion commande les sous-totaux et qui n'est pas souhaitable.
Avez-vous essayé de mettre la commande dans le groupement? devrait revenir: p> http://dev.mysql.com/doc/refman/5.0/fr/group-by-modifiers.html p> < / p>
Le groupe par clause est par défaut trié. J'ai besoin de trier la somme (id)
Ah! Désolé j'ai mal compris la question! Tout devient clair maintenant. :)
Utilisez deux sous-requêtes, comme celle-ci: p> résultat doit être commandé par CNT code> et avec des sous-totaux dans la dernière ligne: p>
Vous pouvez essayer cette requête:
SELECT country,id
FROM mygroup GROUP BY country ASC WITH ROLLUP
C'est la meilleure réponse car les sous-demandes sont mauvaises pour la performance sur les grands ensembles de données.
Il ne répond pas à l'OP qui doit trier par la somme de Rollup, pas la catégorie
@Derokorian une réponse qui ne fonctionne pas ne peut être meilleure. et les sous-requêtes sont souvent le moyen le plus efficace de faire quelque chose; Tout dépend de beaucoup de choses.
La solution de deux sous-requêtes est inutilement compliquée. Vous avez juste besoin d'un et pas de numéro de série.
select country, cnt
from (
select
country,
sum(id) as cnt
from mygroup
group by country with rollup
) mygroup_with_rollup
order by country is null, cnt, country;
Il semblerait que depuis 2017 MySQL a eu le groupement ( ) une fonction. Cela fonctionne lors de l'utilisation de la commande. En outre, le groupe par et l'ordre par peut désormais coexister (la 3ème requête de votre question d'origine ne jette plus d'erreur), mais il a des défauts lorsque vous essayez de trier les données, typiquement que cela jette le rouleau au sommet de la table. Lorsque DESC, mais il y a d'autres problèmes à ce que je démontrerai, puis montrer comment le réparer. Jetons une clé dans les données d'origine: à l'aide de la méthode de la table temporaire indiquée ci-dessus, vous aurez ces résultats là où le NULL / ROLLUP apparaît au milieu de la table, ce qui est un autre problème, probablement encore pire que ce qu'il va au sommet: p> Nous ne voulons probablement pas cela, en utilisant le nouveau groupe de mots-clés () Nous sommes en mesure de trier les articles par leur Les groupements d'abord, puis dans chaque groupe par des colonnes individuelles: p> résultats (de Desc): p> le groupement ( ) La méthode est une version mise à jour qui vous obtient ce dont vous avez besoin et que vous avez l'avantage supplémentaire de vous assurer que le rouleau apparaît où vous le souhaitez. P> P>