代码之家  ›  专栏  ›  技术社区  ›  Abe Miessler

如何跨多个列聚合数据?

  •  0
  • Abe Miessler  · 技术社区  · 7 年前

    geoid  business
    -------------------
    1      BestBuy
    1      WalMart
    1      Target
    2      BestBuy
    2      Target
    2      BestBuy
    3      WalMart
    

    BestBuy -> BigBox_1
    Walmart -> BigBox_2
    Target  -> BigBox_3
    

    我试图找到一种干净的方法来查询原始数据表并填充目标表,目标表应该表示相同的数据,如下所示:

    geoid BigBox_1_Count  BigBox_2_Count   BigBox_3_Count
    ----------------------------------------------------------
    1    |            1  |              1 |                1
    2    |            2  |              0 |                1
    3    |            0  |              0 |                1   
    

    我意识到我可以通过以下三种不同的查询来实现这一点:

    INSERT INTO destTable (geoid, BigBox_1_Count)
    SELECT geoid, COUNT(*) WHERE business = 'BestBuy'
    

    但是我想知道是否有一种方法可以用一个insert语句将所有计数插入到相应的列中?这能做到吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Yogesh Sharma    7 年前

    我会这样做:

    INSERT INTO destTable (geoid, BigBox_1_Count, . . . )
         SELECT geoid, 
                SUM(CASE WHEN business = 'BestBuy' THEN 1 ELSE 0 END) AS BigBox_1_Count,
                SUM(CASE WHEN business = 'WalMart' THEN 1 ELSE 0 END) AS BigBox_2_Count,
                SUM(CASE WHEN business = 'Target' THEN 1 ELSE 0 END) AS BigBox_3_Count
         FROM table t
         GROUP BY geoid;