我正在尝试计算值(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值的子组中出现的次数(例如,在id 101行中出现“red”多少次,answer = 2)。
SELECT id, mytype,
COUNT(*) OVER (PARTITION BY mytype) idsubtotal
FROM table_name
我知道将这个小计存储在表格中(而不是在需要时将其计算在内)构成了表格的错误数据模型,但在我的情况下我需要这样做。
此外,我的问题类似于this question,但略有不同,我尝试使用我之前的回复或其他帖子中对SQL的非常原始的理解进行调整。任何想法的TIA。
答案 0 :(得分:2)
UPDATE table_name a
SET idsubtotal=( SELECT COUNT(1)
FROM table_name b
WHERE a.id=b.id
AND a.mytype=b.mytype
)
答案 1 :(得分:1)
当我在下面尝试这个时,它会计算mytype值出现在整个表中的次数,但是我需要知道它在id值的子组中出现了多少次(例如“red”多少次“出现在id 101行中,answer = 2)。
SELECT id, mytype, COUNT(*)
FROM table_name
GROUP BY id, mytype