【问题标题】:updating with frequency for customer ID以客户 ID 的频率更新
【发布时间】:2013-12-30 11:40:07
【问题描述】:

我有一张如下图的表格:

cust_id/frequency
01/null
01/null
02/null
02/null
01/null
03/null
04/null
04/null
03/null

用频率更新表格后,应该如下所示

cust_id/frequency
01/3
01/3
02/2
02/2
01/3
03/2
04/2
04/2
03/2

我尝试了以下查询,但它只显示我想要的结果,而不是更新表格。

select cust_id, count(*) as frequency
from table A 
group by cust_id 
order by count(*) desc 

是否有任何查询可以帮助我更新它,因为我有 10000 加 cust_id?

非常感谢您花时间看我的问题。

【问题讨论】:

    标签: sql sql-server sql-server-2008 sql-update frequency


    【解决方案1】:

    SQL Server 有一个非常好的特性,那就是 CTE(和子查询)可以更新。您可以使用可更新的 CTE 和窗口函数做您想做的事:

    with toupdate as (
          select t.*, count(*) over (partition by cust_id) as newfrequency
          from table t
         )
    update toupdate
        set frequency = newfrequency;
    

    【讨论】:

      【解决方案2】:

      类似这样的:

      UPDATE t1 
      SET    t1.frequency = cnt 
      FROM   tbl t1 
             JOIN (SELECT cust_id, 
                          Count(1) cnt 
                   FROM   tbl 
                   GROUP  BY cust_id) t2 
               ON t1.cust_id = t2.cust_id 
      

      【讨论】:

        【解决方案3】:

        试试这个 -

        DECLARE @temp TABLE
        (
            cust_id CHAR(2),
            frequency INT
        )
        
        INSERT INTO @temp (cust_id)
        VALUES 
            ('01'), ('01'), ('02'), ('02'),( '01'),
            ('03'), ('04'), ('04'), ('03')
        
        ;WITH cte AS 
        (
            SELECT cust_id, cnt = COUNT(1) 
            FROM @temp
            GROUP BY cust_id
        )
        UPDATE @temp
        SET frequency = cnt
        FROM cte
        WHERE cte.cust_id = [@temp].cust_id
        
        SELECT * FROM @temp
        

        输出 -

        cust_id frequency
        ------- -----------
        01      3
        01      3
        02      2
        02      2
        01      3
        03      2
        04      2
        04      2
        03      2
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-25
          • 1970-01-01
          相关资源
          最近更新 更多