2016-12-19 80 views
3

我有一個下面的查詢在SQL Server返回計數和城市運行的結果:SUM一組通過查詢

SELECT 
    COUNT(*), city 
FROM 
    address 
WHERE 
    address1 LIKE '%[0-9]%' 
    AND phone1 LIKE '%[0-9]%' 
GROUP BY 
    city 
HAVING 
    COUNT(*) > 250 
ORDER BY 
    COUNT(*) DESC 

我得到以下結果:

1232 Atlanta 
345 Chicago 

哪有我寫了一個查詢來獲得計數結果的總和(上面例子中的1232 + 345)

我已經嘗試了子查詢,但由於組似乎導致了一些錯誤..新的SQL和我的爲窮人道歉題。

+0

你想同時獲得所示結果(即兩條記錄)** AND **總數在單個查詢中,還是隻有總數? – FDavidov

回答

1

這裏是另一種使用SUM Over()窗口聚合函數的方法

SELECT city, 
     Count(*) AS total, 
     Sum(Count(*))OVER() grand_total 
FROM address 
WHERE address1 LIKE '%[0-9]%' 
     AND phone1 LIKE '%[0-9]%' 
GROUP BY city 
HAVING Count(*) > 250 
+0

學習感謝 - OVER()是我將使用..非常緊湊。 – Trewq

4

試試這個:

select sum(c) 
from (
    select COUNT(*) c 
    from address 
    where address1 like '%[0-9]%' 
     and phone1 like '%[0-9]%' 
    group by city 
    having count(*) > 250 
    ); 
3

您可以定義CTE,然後使用它:

WITH cte AS (
    SELECT city, COUNT(*) AS total 
    FROM address 
    WHERE address1 LIKE '%[0-9]%' AND 
      phone1 LIKE '%[0-9]%' 
    GROUP BY city 
    HAVING COUNT(*) > 250 
) 

SELECT t.city, 
     t.total, 
     (SELECT SUM(total) FROM cte) AS grand_total 
FROM cte t 
ORDER BY t.total DESC 

如果你只是想那麼總計使用以下查詢:

SELECT SUM(total) AS grand_total 
FROM cte 
+1

謝謝蒂姆!欣賞答案 - 我從您那裏瞭解到,您可以在查詢中使用多個選擇語句,並使用WITH命令 – Trewq

+0

當然可以!再次感謝..我希望有一些選擇,以選擇多個答案,我從 – Trewq

1

您可以使用累計組,例如:

;WITH address(address1,phone1,city) AS 
    (
     SELECT '1','2','Atlanta' UNION ALL 
     SELECT '2','2','Atlanta' UNION ALL 
     SELECT '3','2','Atlanta' UNION ALL 
     SELECT '4','2','Atlanta' UNION ALL 
     SELECT '5','2','Chicago' UNION ALL 
     SELECT '6','0','Chicago' UNION ALL 
     SELECT '7','0','Chicago' 
    ) 
    SELECT COUNT(*), ISNULL(city,'Summary') FROM address where 
    address1 LIKE '%[0-9]%' 
    and phone1 LIKE '%[0-9]%' 
    group by city WITH ROLLUP 
    HAVING count(*) > 2 
    order BY CASE WHEN city IS NULL THEN 1 ELSE 0 END , COUNT(*) DESC 
 

----------- ------- 
4   Atlanta 
3   Chicago 
7   Summary