【问题标题】:SQL Code: Counting the number of items that meets multiple requirementsSQL 代码:统计满足多个要求的项目数
【发布时间】:2014-06-15 23:46:09
【问题描述】:

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

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

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

我不知所措,需要一些指导!

提前谢谢你

【问题讨论】:

  • 你能说得更具体点吗?你试过什么?你能发布你的查询吗?还是样品表?预期结果?
  • 您想在单个查询中计算多个组合吗?可以将多少个属性组合在一起?

标签: sql database select teradata


【解决方案1】:
select count(*) from table where Attribute in (01,950) and Attribute in (02, 951)

【讨论】:

    【解决方案2】:

    您可以使用group byhaving 来做到这一点:

    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;
    

    如果你想要属性的数量,把它放在一个子查询中:

    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 子句非常灵活,适用于您可能希望在每个产品中的属性上出现的所有类型的条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 2019-05-11
      相关资源
      最近更新 更多