Comment rendre cette requête SQL plus efficace?Rendre la requête SQL plus efficace
SELECT
(SELECT COUNT(*) FROM table WHERE price < 10) AS priceUnder10,
(SELECT COUNT(*) FROM table WHERE price BETWEEN 10 AND 20) AS price10to20,
(SELECT COUNT(*) FROM table WHERE price > 20) AS priceOver20,
(SELECT COUNT(*) FROM table WHERE colour = 'Red') AS colourRed,
(SELECT COUNT(*) FROM table WHERE colour = 'Green') AS colourGreen,
(SELECT COUNT(*) FROM table WHERE colour = 'Blue') AS colourBlue;
J'ai déjà des index sur les colonnes price
et colour
, donc je suis à la recherche d'une meilleure façon d'agréger les données.
J'ai examiné en utilisant GROUP BY
, HAVING
, les auto-jointures et les fonctions de fenêtre, mais je n'arrive pas à obtenir le même résultat.
Toutes les suggestions très appréciées.
Merci, excellente réponse, mais pourquoi est la 'WHERE' nécessaire? – gjb
@gjb -Il pourrait bien ne pas être mais imaginez que vous avez une table de 1 000 000 lignes et seulement 1 ligne a un prix ou une couleur non nulle dans «Rouge», «Vert», «Bleu» Les autres 999 999 lignes ne feront pas différence au résultat, mais encore être scanné sans elle. Bien sûr, vous savez peut-être que vos données n'ont pas cette distribution (le «prix» pourrait même ne pas être nul) et il pourrait aussi bien être supprimé! –