2010-07-16 8 views
23

Je voudrais intégrer un SELECT dans un COUNT, mais je ne trouve aucun exemple.SELECT dans un COUNT

#pseudosql 
SELECT a AS current_a, COUNT(*) AS b, 
    COUNT(SELECT FROM t WHERE a = current_a AND c = 'const') as d, 
    from t group by a order by b desc 

Répondre

31

Vous avez vraiment pas besoin d'un sous-select:

SELECT a, COUNT(*) AS b, 
    SUM(CASE WHEN c = 'const' THEN 1 ELSE 0 END) as d, 
    from t group by a order by b desc 
+4

+1 Ceci permet d'adresser la requête spécifique de l'OP de manière plus efficace. J'utiliserais 'IF()' au lieu de 'CASE' car il n'y a que 2 états, mais supprimer la sous-requête est la bonne chose à faire. –

18

Vous pouvez déplacer le nombre() dans votre sous-sélection:

SELECT a AS current_a, COUNT(*) AS b, 
    (SELECT COUNT(*) FROM t WHERE a = current_a AND c = 'const') as d, 
    from t group by a order by b desc 
+0

, sélectionnez l'intérieur d'un compte est une erreur de syntaxe dans SQL? – Ahmad

+1

@Ahmad c'est correct, au moins pour MySQL. –

1

Utilisez SELECT COUNT(*) FROM t WHERE a = current_a AND c = 'const') as d.

0
SELECT a AS current_a, COUNT(*) AS b, 
    (SELECT COUNT(*) FROM t WHERE a = current_a AND c = 'const') as d 
    from t group by a order by b desc