0

値 (mytype) が個別の ID 値内に出現する回数をカウントし、各行のこのカウント (idsubtotal) でテーブルを更新しようとしています。私が持っているテーブル:

id   | mytype | idsubtotal
-----+--------+-----------
 44    red  
101    red     
101    red
101    blue
101    yellow
494    red
494    blue
494    blue
494    yellow
494    yellow

idsubtotal 列を計算/更新する必要があるため、次のようになります。

id   | mytype | idsubtotal
-----+--------+-----------
 44    red      1
101    red      2    
101    red      2
101    blue     1
101    yellow   1
494    red      1
494    blue     2
494    blue     2
494    yellow   2
494    yellow   2

以下でこれを試すと、テーブル全体で mytype 値が出現する回数がカウントされますが、id 値のサブグループ内で何回出現するかを知る必要があります (たとえば、"red" は、 ID 101 行、回答 = 2)。

SELECT id, mytype,
COUNT(*) OVER (PARTITION BY mytype) idsubtotal
FROM table_name

この小計をテーブル自体に格納すると (必要なときにライブで計算するのではなく)、テーブルのデータ モデルが不適切になることはわかっていますが、私の場合はこのようにする必要があります。

また、私の質問はこの質問に似ていますが、少し異なります.以前の回答や他の投稿からのSQLの非常に原始的な理解を使用して調整しようとしたものは何もありません. どんなアイデアでもTIA。

4

2 に答える 2

2
UPDATE table_name a
SET idsubtotal=(  SELECT COUNT(1)
                  FROM table_name  b
                  WHERE a.id=b.id
                  AND a.mytype=b.mytype
                )
于 2012-08-07T23:12:16.183 に答える
1

以下でこれを試すと、テーブル全体で mytype 値が出現する回数がカウントされますが、id 値のサブグループ内で何回出現するかを知る必要があります (たとえば、"red" は、 ID 101 行、回答 = 2)。

SELECT id, mytype, COUNT(*) 
FROM table_name
GROUP BY id, mytype 
于 2012-08-07T19:36:57.033 に答える