2010-07-16 104 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