2010-07-16 69 views
23

我想在COUNT里面嵌入一个SELECT,但是我找不到任何例子。在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 

回答

31

你并不真的需要一个子选择:

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这更有效地解决了OP的特定查询。因为只有2个状态,所以我会使用'IF()'而不是'CASE',但删除子查询是正确的。 – 2010-07-16 17:23:11

18

您可以将内部的计数()的子选择:

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

所以,选择一个数里面是SQL语法错误? – Ahmad 2016-10-19 15:37:31

+1

@Ahmad,这是正确的,至少对于MySQL来说。 – 2016-10-21 21:32:18

1

使用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