我正在尝试计算具有特定sku的不同数量的商店(商店1-10)。这是我的代码:
SELECT distinct COUNT(*) as total_store
FROM(
select distinct st.*
from (select st.*
from store_table st
)st
WHERE st.store between 1 and 10
AND st.sku = 10101
GROUP BY st.store
HAVING COUNT(*) >= 1
)a;
我一直收到错误:
ORA-00979:不是GROUP BY表达式00979. 00000 - “不是GROUP BY表达式”
我不确定为什么这么说?
答案 0 :(得分:3)
您在st.store
分组而不选择数据的情况下可以解决您的错误。 SELECT或GROUP BY子句中所需的所有非聚合必须同时出现在两者中。
话虽如此,你说这太复杂了。如果我们从头开始你想要商店的东西:
select * from stores
仅限某些商店
select * from stores where store between 1 and 10
有一定的SKU
select * from stores where store between 1 and 10 and sku = 10101
现在你想要独特的商店
select distinct store from stores where store between 1 and 10 and sku = 10101
最后你想要独特商店的数量
select count(distinct store)
from stores
where store between 1 and 10
and sku = 10101
看起来您正在从多组集合而不是逻辑层构建查询。查询是一组条件,如果您需要添加依赖于构造表达式的操作,则只需要创建集(内联视图等)。构建查询时,重点是分层附加逻辑。如果结果查询看起来太复杂了,那么与你的说法相比,它就有可能存在。
基于表名STORES我实际上假设它在STORE上是唯一的(并且这是主键,因此非空),因此您不需要执行额外的排序以使其唯一
select count(*)
from stores
where store between 1 and 10
and sku = 10101
答案 1 :(得分:0)
在SQL中,当您使用该组时,您必须定义不能使用的选择字段*和仅包含一个具有分组依据的字段。 是的,您可以使用*然后您必须声明分组中的所有字段。 此外,您需要将所有具有聚合功能的字段放入,但不允许任何字段与group by一起使用聚合。