【问题标题】:how to show total values of different columns while using LEFT JOIN and GROUP BY如何在使用 LEFT JOIN 和 GROUP BY 时显示不同列的总值
【发布时间】:2020-02-01 17:41:00
【问题描述】:

我正在开发一个传销网站。它有一个名为my payouts 的页面,其中有两种类型的支付表i.e. silver_payout, golden_payout,第三种是Total Payout,它是两者的加法。我想按日期显示支出。这两个表都包含date 列。

白银支付表

sp_id | username |    name      | sp_income | admin_charge | tds | net_payout |    date
      |          |              |           |              |     |            |
  1   |  super   | Super Admin  |   750     |      75      | 38  |   637      |  2019-10-03
      |          |              |           |              |     |            |
  2   |  super   | Super Admin  |   750     |      75      | 38  |   637      |  2019-10-03

黄金支付表

gp_id | username |    name      | gp_income | admin_charge | tds | net_payout |    date
      |          |              |           |              |     |            |
  1   |  super   | Super Admin  |   750     |      75      | 38  |   637      |  2019-10-03
      |          |              |           |              |     |            |
  2   |  super   | Super Admin  |   750     |      75      | 38  |   637      |  2019-10-03

这是我预期的总支出

 id   | username | silver pay   | golden pay| total pay   | admin_charge| tds | net_payout |    date
      |          |              |           |             |             |     |            |
  1   |  super   | 1500         |   1500    |    3000     |    300      | 150 |  2550      |  2019-10-03

这就是我得到的总支出

 id   | username | silver pay   | golden pay| total pay   | admin_charge| tds | net_payout |    date
      |          |              |           |             |             |     |            |
  1   |  super   | 3000         |   3000    |    6000     |    600      | 304 |  5096      |  2019-10-03


SELECT silver_payout.username, 
    COUNT(silver_payout.sp_id) AS id,
    SUM(silver_payout.sp_income) AS income,
    SUM(silver_payout.admin_charge) AS ach,
    SUM(silver_payout.tds) AS theTDS,
    SUM(silver_payout.net_payout) AS np,
    silver_payout.date AS sdate,
    golden_payout.username,
    COUNT(golden_payout.gp_id) AS gid, 
    SUM(golden_payout.gp_income) AS gold_income, 
    SUM(golden_payout.admin_charge) AS gach,
    SUM(golden_payout.tds) AS gtheTDS,
    SUM(golden_payout.nett_payout) AS gnp, 
    golden_payout.date AS gdate
FROM (silver_payout 
LEFT JOIN golden_payout
ON silver_payout.username = golden_payout.username)
WHERE silver_payout.username = '$search'
GROUP BY STR_TO_DATE(sdate,'%Y-%m-%d'), STR_TO_DATE(gdate,'%Y-%m-%d')

任何帮助都应该感激。

【问题讨论】:

    标签: php mysql sql left-join


    【解决方案1】:

    使用union allgroup by

    select username, name,
           sum(income * is_silver) as s_income,
           sum(income * is_gold) as g_income,
           sum(income) as total_income,
           . . .  -- continue for the rest of the columns
    from ((select s.*, 1 as is_silver, 0 as is_gold
           from silver s
          ) union all
          (select g.*, 0, 1
           from gold
          )
         ) sg
    where date = ?
    group by username, name
    

    【讨论】:

      猜你喜欢
      • 2016-04-11
      • 2021-01-30
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      • 2019-09-06
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多