group by,order by无法正常工作-sql模式-仅\u full \u group by

0h4hbjxa  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(304)

仅启用“完全”组“按模式”。
我的查询是关于两个表的表连接的-如果我只是使用下面的查询获取数据-它工作正常,并显示正确的记录:

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

但是如果我使用下面的groupbyorderbyprofictdescusing,它会给出正确的记录数,但是没有给出正确的顺序,甚至利润值也不相同

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 list的表达式#2不在group by子句中,并且包含未聚合列“superstoresdb.m.profit”,该列在功能上不依赖于group by子句中的列;这与sql\u mode=only\u full\u group by不兼容
如何处理这个问题?

mm5n2pyu

mm5n2pyu1#

您需要向m.profit提供一个聚合计算(例如sum、avg、max、min),否则sql会认为您需要按它分组。
因此,如果您想按总利润查看产品类别,请尝试以下代码:

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;

相关问题