Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL联接和项目总和_Mysql_Sql - Fatal编程技术网

Mysql SQL联接和项目总和

Mysql SQL联接和项目总和,mysql,sql,Mysql,Sql,有两张桌子 使用者 命令 +--+--------+-------+-------+ |id|subtotal|created|user_id| +--+--------+-------+-------+ 1 10 1000001 1 2 20 1000002 1 3 10 1000003 2 4 10 1000005 1 这样做的目的是从用户那里获得AVG、SUM和上次创建的订单 SELECT users.n

有两张桌子

使用者

命令

+--+--------+-------+-------+
|id|subtotal|created|user_id|
+--+--------+-------+-------+
 1  10       1000001   1
 2  20       1000002   1
 3  10       1000003   2
 4  10       1000005   1
这样做的目的是从用户那里获得
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
例如,SQL请求应返回以下内容:

+--+----+---+--------+
|id|name|sum|date    |
+--+----+---+--------+
 1   A    40  1000005
 2   B    10  1000003

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

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

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;

在MySQL中,在
FROM
子句中避免不必要的子查询尤为重要。这些实际上是具体化的,这可能会妨碍性能索引的使用。

您也可以尝试
从用户u中选择u.id、u.name、SUM(o.subtotal)、MAX(o.created),其中u.id=o.user\u id按u.id分组此查询将忽略数据不在订单表中的用户。@kaushikkaran谢谢,但我需要数据不在订单表中的用户。我已经通过使用
COALESCE
修复了空字段的问题。
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;