【问题标题】:count the instances of value in sub-query, update table计算子查询中值的实例,更新表
【发布时间】:2012-08-08 07:12:16
【问题描述】:

我正在尝试计算一个值 (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 行中出现了多少次,答案 = 2)。

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

我知道将这个小计存储在表本身中(而不是在需要时实时计算)构成表的错误数据模型,但在我的情况下我需要这样做。

另外,我的问题与this question 类似,但略有不同,我没有尝试使用我从之前的回复或其他帖子中对 SQL 的非常原始的理解进行调整。 TIA 的任何想法。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:
    UPDATE table_name a
    SET idsubtotal=(  SELECT COUNT(1)
                      FROM table_name  b
                      WHERE a.id=b.id
                      AND a.mytype=b.mytype
                    )
    

    【讨论】:

    • 请注意:这在 SQL Server 中不起作用。我知道问题是针对 Oracle 的,只需在此处添加即可。
    【解决方案2】:

    当我在下面尝试这个时,它会计算 mytype 值在整个表中出现的次数,但我需要知道它在 id 值的子组中出现了多少次(例如,“red " 出现在 id 101 行内,答案 = 2)。

    SELECT id, mytype, COUNT(*) 
    FROM table_name
    GROUP BY id, mytype 
    

    【讨论】:

    • 是的!非常感谢!这很好用。感谢您的帮助!
    • 一个快速相关的问题,因为我在许多记录上执行此操作并且需要很长时间才能运行,有没有办法让他们更新 idsubtotal,而不是仅仅选择结果柱子?使用您的解决方案的一些 UPDATE 和 SELECT 组合?
    • 此处选择的答案可能会有所帮助:stackoverflow.com/questions/6286452/mysql-bulk-insert-or-update
    猜你喜欢
    • 1970-01-01
    • 2019-01-11
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2014-12-26
    相关资源
    最近更新 更多