代码之家  ›  专栏  ›  技术社区  ›  Stacy Thompson

SQL选择列并从下一列中计数

  •  0
  • Stacy Thompson  · 技术社区  · 7 年前

    我的推荐表结构是,字段ref是唯一的:

    ID  pid  ref   ref_by  
    1    1   k      NAN
    2    2   l      k
    3    3   m      k
    4    4   n      l
    
    

    用户表为:

    id    name   
    1     john  
    2     Bob  
    3     Tim   
    4     Rob   
    

    pid  name   ref   number_of_referals  points_earned 
    1     john   k      2                   200
    2     Bob    l      1                   100
    3     Tim    m      0                     0
    4     Rob    n      0                     0
    
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   forpas    7 年前

    您需要2个联接:
    第一个从 users 表到 referrals 第二个是对推荐进行分组和计数的查询:

    select 
      r.id, u.name, r.ref,
      case when c.counter is null then 0 else c.counter end number_of_referals,
      case when c.counter is null then 0 else c.counter end * 100 points_earned
    from users u inner join referrals r
    on r.pid = u.id
    left join (select ref_by, count(*) counter from referrals group by ref_by) c
    on c.ref_by = r.ref
    order by r.id
    

    demo