【问题标题】:mysql join sum from same tablemysql 从同一张表中加入总和
【发布时间】:2013-12-30 01:25:26
【问题描述】:

这是我的桌子:

我正在尝试列出收入最高的用户列表(TOP 列表)。 我使用的是 SUM(earnings)GROUP BY username,但我也想SUM upline_earnings

上表中user1test的上线,所以test的所有收入都应该算作user1 赚钱。

这是我的代码:

SELECT COUNT (a.id) as total,
             (SUM(CASE WHEN b.upline=a.username THEN b.up_earnings ELSE 0 END)+SUM(a.earnings)) as tot_earnings,
             SUM(a.dls) as tot_dls,
             a.username
FROM logs a left join logs b ON a.username=b.upline
GROUP BY a.username ORDER BY tot_earnings DESC

但它不起作用!看起来表 A 中的结果会重复:http://i.stack.imgur.com/Mefht.png

欢迎任何帮助!

谢谢!

【问题讨论】:

  • 图片?这不是我们滚动的方式。

标签: mysql sql join group-by sum


【解决方案1】:

我认为您想在执行join 之前按username 聚合表格。如果我理解你想要做什么,这可能是查询:

SELECT l.username, count(*) as total_uplines,
       coalesce(sum(b.up_earnings), 0) + l.earnings as tot_earnings,
       l.tot_dls
FROM (select l.username, sum(l.earnings) as earnings,
             sum(l.dls) as tot_dls
      from logs l
      group by l.username
     ) l left join
     logs b
     ON l.username = b.upline
GROUP BY l.username, l.earnings, l.tot_dls
ORDER BY tot_earnings DESC;

【讨论】:

  • 完美运行!谢谢!!一个问题,如果我必须添加一个 WHERE 子句来检查日期是否是今天,我必须同时添加两个 SELECT 子句吗?
  • @user3144996 。 . .大概。如果您从今天开始只想要earningsup_earnings,那么您可能希望将过滤器添加到两者。
猜你喜欢
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
相关资源
最近更新 更多