2016-12-19 3 views
3

によって、グループの結果:SUM私は数と街を返すSQL Serverで実行されている次のクエリを持っているクエリ

1232 Atlanta 
345 Chicago 

どのように行うことができます

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 + 345の結果を合計するためのクエリを作成します。

サブクエリを試しましたが、グループによっていくつかのエラーが発生しているようです。貧しい人々のための謝罪質問。

+0

を行い、あなたが示した結果の両方を取得したい(すなわち、 2つのレコード)** 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

ありがとうTim!答えを気に入ってください - 私は、クエリで複数のSELECT文を使用でき、WITHコマンドであることを学んだ – Trewq

+0

はい、もちろんです!もう一度ありがとう..私はそこから複数の答えを選択するいくつかのオプションがあることを願っています – Trewq

1

あなたはたとえば、グループのROLLUPを使用することができます。

;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 
関連する問題