在SQL中嵌套计数

问题描述 投票:1回答:2

我正在尝试计算具有特定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表达式”

我不确定为什么这么说?

sql oracle group-by having
2个回答
3
投票

您的错误是由qazxsw poi分组而不选择数据引起的。 SELECT或GROUP BY子句中所需的所有非聚合必须同时出现在两者中。

话虽如此,你说这太复杂了。如果我们从头开始你想要商店的东西:

st.store

只有某些商店

select * from stores

有一定的SKU

select * from stores where store between 1 and 10

现在你想要独特的商店

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

看起来您正在从多组集合而不是逻辑层构建查询。查询是一组条件,如果您需要添加依赖于构造表达式的操作,则只需要创建集(内联视图等)。构建查询时,重点是分层附加逻辑。如果结果查询看起来太复杂了,那么与你说的相比,那么它就有可能。


基于表名STORES,我实际上假设它在STORE上是唯一的(并且这是主键,因此非空),因此您不需要执行额外的排序以使其唯一

select count(distinct store) 
  from stores 
 where store between 1 and 10 
   and sku = 10101

0
投票

在SQL中,当您使用该组时,您必须定义不能使用的选择字段*和只有一个具有分组依据的字段。是的,您可以使用*然后您必须声明分组中的所有字段。此外,您需要将所有具有聚合功能的字段放置,但不允许使用具有分组依据的字段使用聚合。

© www.soinside.com 2019 - 2024. All rights reserved.