提问人:Hao 提问时间:10/21/2023 最后编辑:Hao 更新时间:10/21/2023 访问量:64
为什么我不能使用“group by”而不是“where”子句?#Mysql #sql
Why can't I use "group by" instead of a "where"clause? #Mysql #sql
问:
Mysql 不执行 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;
group-by 版本 - 错误
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;
提前感谢您的所有回答!
我试图理解为什么“分组依据”语法在这里不适用的逻辑。
答:
1赞
kritikadvn
10/21/2023
#1
您可能会收到错误“子查询返回多行”。 现在,如果我们按子查询查看您的分组: 选择 Sum(invoice_total) from Invoice Group by client_id; 此特定查询将在结果中给出一个关系,其中包含每个客户端的invoice_total之和。
现在,如果将此查询用作子查询,则应将其与外部查询相关联。
选择c.client_id、c.client_name、(从发票中选择 Sum(invoice_total))作为客户 C 的total_sales;
您将期望的结果是 客户 ID |客户名称 |total_sales
但是你不会得到它,因为内部子查询导致了一个完整的关系,它与外部查询的 ID 和名称无关。 您期望total_sales值对应于外部查询的client_id因此,我们必须使用“where”子句加入 c.client_id=client_id这在“group by”查询中不会发生。
我希望你能明白。对不起,如果你不这样做,我尽力解释。
评论
0赞
Hao
10/21/2023
感谢您的明确回应!!现在我明白了为什么它不会反过来工作的原因。
评论
Mysql doesn't execute the group-by version
where
group by