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 回答