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”语法在这里不适用的逻辑。
您可能会收到错误“子查询返回多于一行”。 现在,如果我们通过子查询看到您的组: 按 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”查询中不会发生。
我希望你能明白。抱歉,如果您不这样做,我已尽力解释。