我有这张桌子
itemname 属性值 ------------------------------------------ 大号 一种颜色红色 B码大 B 颜色 蓝色 C尺寸小 C色 蓝色 D尺寸小 D 颜色 蓝色 E尺寸小 E色蓝色
我创建了一个这样的列表:SELECT property,value,COUNT(itemname),GROUP_CONCAT(itemname) FROM table GROUP BY property,value
属性值计数 --------------------------------- 大号 2 (A,B) 小号 3 (C,D,E) 红色 1 (A) 蓝色 4 (B,C,D,E)
我想过滤 BIG && SMALL && BLUE 的项目,我怎样才能达到这个结果?(在处理过滤值时,我必须具体说明该属性)
`选择
属性、值、计数(项目名称)、GROUP_CONCAT(项目名称)
从
桌子
通过...分组
适当的价值
拥有
( 属性 IN ('size') && value IN ('big','small') )
&&
( 属性 IN ('color') && value IN ('blue') )`
但这没有结果,因为它试图同时匹配行的大小和颜色?在这种情况下,我想要的输出是避免项目 A,因为它是红色的,如下所示:
属性值计数 --------------------------------- size big 1 (B) A 不在这里,因为它是红色的 size small 3 (C,D,E) 没有变化,因为都是蓝色的 color red 0 (A) 没有选择红色,所以这一行应该是 0 或者根本不列出 颜色蓝色 4 (B,C,D,E) 所有 4 都是大或小和蓝色
请有人帮我解决这个问题,我花了两天时间想知道解决方案。我可以将 CASE 与 HAVING 结合使用吗?或者我应该以某种方式解决 WHERE 问题?
注意:这个表实际上不是真实的,但如果这个问题可以解决,我可以在我的真实表中使用它,这要复杂得多。