SQL连接和项目总和

Asc*_*hem 4 mysql sql

有两张桌子

用户

+--+----+
|id|name|
+--+----+
 1   A    
 2   B
Run Code Online (Sandbox Code Playgroud)

命令

+--+--------+-------+-------+
|id|subtotal|created|user_id|
+--+--------+-------+-------+
 1  10       1000001   1
 2  20       1000002   1
 3  10       1000003   2
 4  10       1000005   1
Run Code Online (Sandbox Code Playgroud)

这个想法是让AVG,SUM并从用户的最后创建的订单.

SELECT
  users.name,
  users.phone,
  SUM(a.subtotal),
  COALESCE(a.created, NULL)
  FROM users
LEFT JOIN
  (
  SELECT
    orders.id,
    orders.subtotal,
    orders.user_id,
    orders.created
  FROM
    orders 
  JOIN(
    SELECT MAX(i.created) created, i.user_id 
      FROM orders i
      GROUP BY i.user_id
  )AS j ON(j.user_id = orders.user_id AND orders.created = j.created) GROUP BY orders.user_id
) AS a ON users.id = a.user_id
GROUP BY users.id
Run Code Online (Sandbox Code Playgroud)

例如,SQL请求应该返回:

+--+----+---+--------+
|id|name|sum|date    |
+--+----+---+--------+
 1   A    40  1000005
 2   B    10  1000003
Run Code Online (Sandbox Code Playgroud)

但上面的SQL无法计算总和.我错过了什么?

Gor*_*off 8

您的查询似乎太复杂了.这个怎么样?

SELECT u.id, u.name, SUM(o.subtotal), MAX(o.created)
FROM users u LEFT JOIN
     orders o
     ON u.id = o.user_id
GROUP BY u.id, u.name;
Run Code Online (Sandbox Code Playgroud)

在MySQL中,避免FROM子句中不必要的子查询尤为重要.这些实际上已实现,并且可能妨碍使用索引来提高性能.