gpt4 book ai didi

mysql - 分组依据、排序依据无法正常工作 - SQL 模式 - ONLY_FULL_GROUP_BY

转载 作者:行者123 更新时间:2023-11-29 17:46:11 26 4
gpt4 key购买 nike

仅启用_full_group_by 模式。

我的查询是关于 2 个表的表连接 -如果我只是使用下面的查询获取数据 - 它可以正常工作并显示正确的记录:

select p.product_category, m.profit 
from market_fact m inner join
prod_dimen p
on m.prod_id = p.prod_id;`

但是如果我使用下面的按 Profit desc 进行分组,则不会。记录正确且相同 - 但未给出正确的顺序,甚至利润值也不相同

select p.product_category, m.profit 
from market_fact m inner join
prod_dimen p
on m.prod_id = p.prod_id
order by m.Profit desc;

如果我使用按产品类别分组并按利润排序 -

select p.product_category, m.profit 
from market_fact m inner join
prod_dimen p
on m.prod_id = p.prod_id
group by p.Product_Category
order by m.Profit desc;

然后 - 它抛出错误:错误代码:1055。SELECT 列表的表达式 #2 不在 GROUP BY 子句中,并且包含非聚合列“superstoresdb.m.Profit”,该列在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容

如何解决这个问题?

最佳答案

您需要向 m.profit 提供聚合计算(例如 SUM、AVG、MAX、MIN),否则 SQL 会认为您想要对其进行 GROUP BY。

因此,如果您想按总利润查看产品类别,请尝试以下代码:

select p.product_category, SUM(m.profit) as profit 
from market_fact m inner join
prod_dimen p
on m.prod_id = p.prod_id
group by p.product_Category
order by SUM(m.profit) desc;

如果您不想进行聚合计算而只想​​删除重复项,那么最好使用 SELECT DISTINCT 子句而不是 GROUP BY:

select distinct p.product_category, m.profit
from market_fact m inner join
prod_dimen p
on m.prod_id = p.prod_id
order by m.profit desc;

关于mysql - 分组依据、排序依据无法正常工作 - SQL 模式 - ONLY_FULL_GROUP_BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49807910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com