结合MySQL中的2个SUMS和优化查询

时间:2015-01-09 19:54:07

标签: mysql

我的代码如下:

SELECT admin_teams.name,
SUM(temp_orders.amount_paid) as amount,
SUM(instalments.amount) as amount2
FROM temp_orders
LEFT JOIN admin_teams
ON admin_teams.id = temp_orders.team
LEFT JOIN instalments
ON instalments.order_id = temp_orders.order_id
WHERE 
(DATE(temp_orders.date_paid) = CURDATE()
OR DATE(instalments.date_paid) = CURDATE())
AND (temp_orders.pay_status = 4
OR instalments.pay_status = 4)
GROUP BY temp_orders.team
ORDER BY temp_orders.team ASC
LIMIT 5

它生成一个看起来像的表:

+-------------+--------+---------+
|    name     | amount | amount2 |
+-------------+--------+---------+
| team name 1 |    100 |     150 |
| team name 2 |    200 |     250 |
| team name 3 |   300  |     175 |
+-------------+--------+---------+

我有两个问题;

  1. 我实际上只想要一列,即金额和金额2的总和。
  2. 查询非常慢 - 这需要190秒才能运行。
  3. 我确实让它几乎与联盟一起工作,这几乎是即时的 - 但我无法完全正常工作,因为我的第一个select语句中的列数与第二个中的列数不匹配 - 表&# 39;分期付款'没有团队列,但表temp_orders没有。

    任何人都可以帮助解决这两个问题吗?

    感谢。

1 个答案:

答案 0 :(得分:0)

SELECT admin_teams.name,
(SUM(temp_orders.amount_paid) + SUM(instalments.amount))  as amount,
FROM temp_orders
LEFT JOIN admin_teams
ON admin_teams.id = temp_orders.team
LEFT JOIN instalments
ON instalments.order_id = temp_orders.order_id
WHERE 
temp_orders.date_paid >= CURDATE()
OR instalments.date_paid >= CURDATE())
AND (temp_orders.pay_status = 4
OR instalments.pay_status = 4)
GROUP BY temp_orders.team
ORDER BY temp_orders.team ASC
LIMIT 5

并添加这些索引

ALTER TABLE temp_orders ADD KEY (date_paid ,pay_status,team);
ALTER TABLE instalments ADD KEY (date_paid ,pay_status);