在SQL中嵌套计数

我想要计算具有特定SKU的商店(商店1-10)的不同数量。这里是我的代码:在SQL中嵌套计数

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: not a GROUP BY expression 00979. 00000 - "not a GROUP BY expression"

,我不知道为什么它是说?

回答:

你的错误是由你分组st.store而没有选择数据。您在SELECT或GROUP BY子句中所需的所有非聚合必须同时出现在两者中。

话虽如此,你让这太复杂了。如果我们从头开始,你想从商店的东西:具有一定的SKU

select * from stores where store between 1 and 10 and sku = 10101 

select * from stores 

只有某些商店

select * from stores where store between 1 and 10 

现在需要的独特的商店

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

finally y OU希望独特的商店

select count(distinct store) 

from stores

where store between 1 and 10

and sku = 10101

它看起来像你从集,而不是逻辑层层建立查询起来的计数。查询是一组条件,只需要创建集合(内联视图等),如果您需要添加依赖于构造表达式的操作。构建查询时,重点关注分层附加逻辑。如果由此产生的查询看起来太复杂了,那么你就可能会这么说。


根据上表店名店其实我认为这是对存储唯一的(而且这是主键,因此非空),所以你不需要进行额外的排序使其具有唯一性

select count(*) 

from stores

where store between 1 and 10

and sku = 10101

回答:

在SQL当你使用GROUP BY,那么你必须要确定你不能使用*,仅一个字段与组的选择字段。 是的,你可以使用*,那么你必须声明组中的所有字段。 此外,您还需要将所有具有聚合功能的字段,但无论哪个字段与分组依据都不允许使用聚合。

以上是 在SQL中嵌套计数 的全部内容, 来源链接: utcz.com/qa/266731.html

回到顶部