SQL 为什么我不能使用group by替代where子句

SQL 为什么我不能使用group by替代where子句

问题描述

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;

解决方案

您可能会遇到错误“子查询返回多行”。

现在,如果我们看看你的分组子查询:

select sum(invoice_total) from invoice group by client_id;

这个特定查询将返回每个客户的发票总金额。

现在,如果你把这个查询作为子查询使用,你应该在外部查询中关联它。

select c.client_id, c.client_name, (select sum(invoice_total) from invoice) as total_sales from client c;

你期望的结果是

client’s id | client’s name | total_sales

但是你得不到这个结果,因为内部子查询会返回一个完整的关系,它与外部查询的ID和名称没有关联。

你期望的total_sales值对应于外部查询的client_id,所以我们必须使用“where”子句来连接c.client_id=client_id,这在“group by”查询中没有发生。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程