在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