分组后再子集再查询

【问题】

有如下查询结果

imagepng

从这里面查询每个产品 (ProductID) 具有某个(或同时具有某几个)属性 (即 AttID) 的产品数量,并按 ClassID 分组
如果只查询某个产品具有单个属性的话,可以用如下 SQL,如下面查询具有 AttID 为 1 的所有产品:

Java code

SELECT classid,COUNT(ProductID) AS 数量 
FROM View\_mf\_ProductList WHERE (AttID = 1) GROUP BY ClassID
classid                   数量  
------------                ----------------  
13                           2  
14                           1  

如果查询的产品同时具有多个属性,比如同时具有 AttID 为 1 并且 AttID 为 2 时,上面的 SQL 就会出问题。
下面是正确的查询结果,请问怎样写 SQL 能得到下面的结果集呢?

classid                   数量  
------------                ----------------  
13                           1  
14                           0

【回答】

分组子集的运算,数据量不大时读出来处理要简单些,用 SPL 只要一句就可以:



A

1

$select distinct ClassID,ProductID,AttID from tb where AttID in(1,2)

2

=A1.group(ClassID;~.group(ProductID).count(~.len()==2):数量)


A1:使用 SQL 取表中数据

A2:通过 group 进行分组聚合计算