1

我试图通过使用 id 组合两个表来显示每个 id 的总销售额。我有两个表 1. 用户表,2. 销售表

//user table

--------------
| id  | name  |
---------------
|  1  | yuki  |
|  2  | soman |
---------------


// sales table

--------------
| id  | total|
---------------
|  1  | 300  |
|  2  | 23   |
|  1  | 500  |
---------------

根据我的查询,它只显示 1 个销售女巫是 yuki 的销售。


SELECT i.name,SUM(ROUND(s.total),2)) AS sales
FROM user i
INNER JOIN sales s
ON i.id = s.id
--------------
| name | sales|
---------------
| yuki | 800  |
---------------

我想显示这样的输出,我的查询遗漏了什么?

--------------
| name | sales|
---------------
| yuki | 800  |
|soman | 23   |
---------------

4

1 回答 1

5

您的查询需要一个group by子句:

SELECT u.name, SUM(ROUND(s.total),2)) AS sales
FROM user u
INNER JOIN sales s ON s.id = u.id
GROUP BY u.id, u.name

ONLY_FULL_GROUP_BY启用sql 模式时更容易发现此类错误。

作为替代方案,您可能需要考虑一个相关的子查询,它可以避免外部聚合(它实际上表现得像 a LEFT JOIN,它 - 可能 - 更接近于您想要的):

SELECT u.*, 
    (SELECT SUM(ROUND(s.total),2)) FROM sales s WHERE s.id = u.id) AS sales
FROM user u

旁注:user是语言关键字,因此不是列名的好选择。考虑使用其他东西,users例如。

于 2020-10-28T13:21:24.720 回答