2017-12-27 740 views
1

我想要计算具有特定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"

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

回答

3

你的错误是由你分组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 
0

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