0

このクエリがあります

SELECT  NAME, OTHER_NAME, COUNT(NAME)
FROM ETHNICITY
GROUP BY NAME,OTHER_NAME

other_nameそして、その列またはその列に現在の合計を追加したいと思いnameます。

たとえば、3x african american と 2x name= "other" および other_name = "jewish" がある場合、カウントとして 3 と 2 を指定し、通過するときにそれらを合計します。

これを拡張して追加する方法はありますか? ありがとう。

4

3 に答える 3

2

sum() ... over()Oracleでは、現在の合計はウィンドウ関数を使用して簡単に実行できます。

select  name
,       other_name
,       name_count
,       sum(name_count) over(
            order by name, other_name) as running
from    (
        select  name
        ,       other_name
        ,       count(name) as name_count
        from    ethnicity
        group by 
                name
        ,       other_name
        order by
                name
        ,       other_name
        ) subqueryalias

SQLフィドルでの例

于 2013-02-12T19:05:32.120 に答える
2

サブクエリを使用してこれを行うことを好みます。

select t.name, t.other_name, t.cnt,
       sum(cnt) over (order by name) as cumecnt
from (SELECT  NAME, OTHER_NAME, COUNT(NAME) as cnt
      FROM ETHNICITY
      GROUP BY NAME,OTHER_NAME
     ) t

これは、 の順序で count の累積合計が必要であることを前提としていますname

分析関数の order by は累積合計を行います。これは標準の構文で、Postgres と SQL Server 2012 でもサポートされています。

以下も機能する可能性があります

select name, other_name, count(name) as cnt,
       sum(count(name)) over (order by name)
from ethnicity
group by name, other_name

これは読みにくく (sum(count())少し耳障りです)、おそらくエラーが発生しやすいと思います。Oracle でこの構文を試したことはありません。SQL Server 2012 で動作します。

于 2013-02-12T18:59:39.763 に答える
1

グループ化セットを見て、合計を集計できます。

これがあなたが求めているものかどうかはわかりませんが...

SELECT  NAME, OTHER_NAME, COUNT(NAME)
FROM ETHNICITY
GROUP BY GROUPING SETS ((NAME,OTHER_NAME), (Name), ())

申し訳ありませんがID10Tエラー...グループ化セットは2番目の集計を必要としませんでした、カウントはそれ自体でそれを行います:

したがって、このデータ:

Name   Other_Name
A       B
A       C
A       D
B       E
B       F
B       G
C       H
C       I
C       J

結果は

Name   Other_Name   CNT(Name)
A      B           1
A      C           1
A      D           1
A                  3
B      E           1
B      F           1
B      G           1
B                  3
C      H           1
C      I           1
C      J           1
C                  3
                   9
于 2013-02-12T19:01:25.587 に答える