分组后再子集再查询
【问题】
有如下查询结果
从这里面查询每个产品 (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 进行分组聚合计算