为什么我不能使用“group by”而不是“where”子句? #Mysql #sql

问题描述 投票:0回答:1

Mysql不执行group-by版本。我试图理解为什么会发生这种情况,因为据我了解,聚合后使用“group by”语法,但为什么在这里它不起作用?

where 子句版本 - 正确:

SELECT 
    c.client_id,
    c.name,
    (SELECT AVG(invoice_total) FROM invoices) AS average,
    (SELECT sum(invoice_total) FROM invoices where client_id=c.client_id) AS total_sales,
    (SELECT average - total_sales) AS differences
FROM clients c;

分组版本 - 错误

SELECT 
    c.client_id,
    c.name,
    (SELECT AVG(invoice_total) FROM invoices) AS average,
    (SELECT sum(invoice_total) FROM invoices GROUP BY client_id) AS total_sales,
    (SELECT average - total_sales) AS differences
FROM clients c;

提前感谢您的所有答复!

我试图理解为什么“group by”语法在这里不适用的逻辑。

sql mysql group-by where-clause
1个回答
0
投票

您可能会收到错误“子查询返回多于一行”。 现在,如果我们通过子查询看到您的组: 按 client_id 从发票组中选择 sum(invoice_total); 这个特定的查询将给出结果与每个客户的invoice_total总和的关系。

现在,如果您将此查询用作子查询,则应该将其与外部查询相关联。

选择c.client_id,c.client_name,(从发票中选择sum(invoice_total))作为客户c的total_sales;

您期望的结果是 客户 ID |客户姓名 |总销售额

但是你不会得到它,因为内部子查询会产生一个完整的关系,它与外部查询的 id 和名称无关。 您期望total_sales值对应于外部查询的client_id,因此,我们必须使用“where”子句连接c.client_id=client_id,这在“group by”查询中不会发生。

我希望你能明白。抱歉,如果您不这样做,我已尽力解释。

© www.soinside.com 2019 - 2024. All rights reserved.