2010-07-16 14 views
23

Vorrei inserire un SELEZIONA in un COUNT, ma non riesco a trovare alcun esempio.SELEZIONA all'interno di un CONTEGGIO

#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 

risposta

31

non si ha realmente bisogno di un sub-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 Questo indirizza la query specifica dell'OP in un modo più efficiente. Userei 'IF()' invece di 'CASE' poiché ci sono solo 2 stati, ma rimuovere la sotto-query è la cosa giusta da fare. –

18

È possibile spostare il count() all'interno del vostro sub-select:

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

fine, selezionare all'interno di un conteggio è un errore di sintassi in SQL? – Ahmad

+1

@Ahmad che è corretto, almeno per MySQL. –

1

Usa 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