首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL代码:统计满足多个需求的条数

问SQL代码:统计满足多个需求的条数
EN

Stack Overflow用户
提问于 2014-04-30 04:39:05
回答 2查看 561关注 0票数 0

我正在尝试获取满足多个要求的项目的总数量。在这个表中,销售的每个产品都有一个不同的ID。但是,每个产品都可以与多个属性配对(我们将这些属性称为颜色)。例如:具有ID# 1234的产品可以具有蓝色和橙色属性,这两个属性都列在属性列下(在指向产品ID#的多行对一链接中)。

我要做的是计算具有某些属性组合的产品的数量。例如,有多少产品有橙色和蓝色,而不仅仅是橙色或蓝色。更复杂的是,我不能提取产品ID的总数,我必须对它们进行计数。可以说,我拉动了一段时间,在这段时间里,有数以亿计的产品售出,所有产品都具有不同的属性组合。更复杂的是,每种颜色都有多个代码。例如,蓝色可以被编码为01或950。

有没有办法制作一条SQL语句,让我计算满足特定属性组合的产品数量?例如,拉卷为:橙色和蓝色、蓝色和绿色、绿色和黄色等。

我束手无策,需要一些指导!

提前谢谢你

EN

回答 2

Stack Overflow用户

发布于 2014-04-30 04:42:27

代码语言:javascript
复制
select count(*) from table where Attribute in (01,950) and Attribute in (02, 951)
票数 0
EN

Stack Overflow用户

发布于 2014-04-30 04:45:08

您可以使用group by和having来完成此操作

代码语言:javascript
复制
select ProductId
from ProductAttributes pa
group by ProductId
having sum(case when Attribute in ('01', '950') then 1 else 0 end) > 0 and
       sum(case when Attribute in ('02', '951') then 1 else 0 end) > 0;

如果您需要属性的数量,请将以下内容放入子查询中:

代码语言:javascript
复制
select count(*) 
from (select ProductId
      from ProductAttributes pa
      group by ProductId
      having sum(case when Attribute in ('01', '950') then 1 else 0 end) > 0 and
             sum(case when Attribute in ('02', '951') then 1 else 0 end) > 0
     ) t;

还有其他方法,但是having子句对于您可能希望在每个产品中的属性上使用的所有类型的条件都非常灵活。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23374816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档