分组依据,无法正常工作 - SQL模式 - ONLY_FULL_GROUP_BY

时间:2018-04-13 01:13:37

标签: mysql sql sorting group-by sql-order-by

启用了Only_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按顺序使用group,则不会。记录正确和相同 - 但没有给出正确的顺序,甚至利润值不相同

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

不兼容

如何处理?

1 个答案:

答案 0 :(得分:0)

您需要向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;