分组依据、排序依据无法正常工作 - SQL 模式 - ONLY_FULL_GROUP_BY
Group by, Order by not working correctly - SQL mode - ONLY_FULL_GROUP_BY
Only_full_group_by 模式已启用。
我的查询是关于 table 2 table 的连接 -
如果我只是使用以下查询获取数据 - 它可以正常工作并显示正确的记录:
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;
Only_full_group_by 模式已启用。
我的查询是关于 table 2 table 的连接 - 如果我只是使用以下查询获取数据 - 它可以正常工作并显示正确的记录:
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;