代码之家  ›  专栏  ›  技术社区  ›  Clock Slave

SQL-向数据添加频率列

sql
  •  0
  • Clock Slave  · 技术社区  · 7 年前

    我有一个具有分类变量的数据集。我需要向该数据集中添加一列,该列将显示相应级别的频率。

    例如,假设您有一个具有状态列的数据集。这是输入数据集。在输出数据集中,对于现在的每一行,还将有一列告诉我特定状态在数据集中发生的次数。

    例子

    # Date_Built    Square_Footage  Num_Beds    Num_Baths   State   Price
    # 01/01/1920    1700            3           2           NY      700,000   
    
    # Date_Built    Square_Footage  Num_Beds    Num_Baths   State   Price     Freq_State
    # 01/01/1920    1700            3           2           NY      700,000   4,500
    

    在本例中,a Freq_State 是否已添加列,该列捕获 NY 出现 4500 时间在 State

    这就是我目前为止所拥有的,但它只给出了列的频率。我也经历过类似的问题 here 但这两个答案都建议创建一个新的视图。有没有一种方法可以直接添加此列而不必创建新表

    select
      count(grp_column) as freq_encode,
      grp_column
    from
      df_sql_tbl
    group by
      grp_column
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Radim Bača    7 年前
    SELECT t1.*, 
           (SELECT count(*) cnt FROM df_sql_tbl WHERE state = t1.state)
    FROM df_sql_tbl t1
    
        2
  •  3
  •   Radim Bača    7 年前

    spark sql应该支持window函数,因此,尝试使用它们

    select *,
           count(*) over (partition by state)
    from your_table