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;