如何计算行数并避免重复?

阿兰诺维奇

对于一个大学项目,我必须根据一张表的数据来计算kpi。该表存储有关超级市场的​​篮子,购物的行项目及其产品类别的数据。我必须计算在特定商店中购买的商品的所有商品类别的数量。所以在表中看起来像这样:

StoreId   BasketID  CategoryId
1           1           1
1           1           2
1           1           3
1           2           1
1           2           3
1           2           4
2           3           1
2           3           2
2           3           3
2           4           1

作为查询的结果,我想要一个表,该表对与商店相关联的所有购物篮中的不同商品类别进行计数。像这样的东西:

StoreId   Count(CategoryId)
1            4
2            3

如果我对硬值进行非动态声明,则它可以正常工作。

select basket_hash, store_id, count(DISTINCT retailer_category_id)
from promo.checkout_item
where store_id = 2
  and basket_hash = 123
GROUP BY basket_hash, store_id;

但是,当我尝试以动态方式编写它时,sql将计算每个购物篮的金额并将单个金额加在一起。

select store_id,  Count(DISTINCT retailer_category_id) 
from promo.checkout_item
group by store_id;

但是像这样,它并没有在与商店相关的所有购物篮中比较类别,我得到了重复,因为类别可以在购物篮1和购物篮2中。

有人可以帮忙吗?

谢谢!

萨提蓬普瓦瓦(Suttipong Pourpawawead)

作为您的预期结果,您是否需要以下声明?

SELECT StoreId,  COUNT(*)
FROM (
       SELECT DISTINCT StoreId, CategoryId 
       FROM table_name
)
GROUP BY StoreId;

请用您的表名替换语句中的“ table_name”。

我不确定“动态方式”是什么意思。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章