有如下查询结果
从这里面查询每个产品 (ProductID) 具有某个(或同时具有某几个)属性 (即 AttID) 的产品数量,并按 ClassID 分组
如果只查询某个产品具有单个属性的话,可以用如下 SQL,如下面查询具有 AttID 为 1 的所有产品:
Java code
SELECTclassid,COUNT(ProductID)AS数量 FROMView\_mf\_ProductListWHERE(AttID=1)GROUPBYClassID
classid数量 ---------------------------- 132 141
如果查询的产品同时具有多个属性,比如同时具有 AttID 为 1 并且 AttID 为 2 时,上面的 SQL 就会出问题。
下面是正确的查询结果,请问怎样写 SQL 能得到下面的结果集呢?
classid数量 ---------------------------- 131 140
分组子集的运算,数据量不大时读出来处理要简单些,用 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 进行分组聚合计算