【发布时间】:2016-08-13 02:48:21
【问题描述】:
我有一个实体属性值的索引表,如下所示:
+-----------+--------------+----------+-------+
| entity_id | attribute_id | store_id | value |
+-----------+--------------+----------+-------+
| 38 | 190 | 1 | 22 |
| 38 | 190 | 1 | 23 |
| 39 | 190 | 1 | 22 |
| 39 | 190 | 1 | 23 |
| 39 | 190 | 1 | 42 |
| 40 | 190 | 1 | 22 |
| 41 | 190 | 1 | 54 |
| 42 | 190 | 1 | 54 |
| 43 | 190 | 1 | 22 |
| 44 | 190 | 1 | 22 |
| 45 | 190 | 1 | 54 |
+-----------+--------------+----------+-------+
如您所见,单个实体可以为单个属性具有多个值(entity_id38 具有 values 22,23)并且这些值对于每个实体不是唯一的(entity_id38,39 两者共享value 22)。
要解决的第一个问题是获取每个值的不同实体的数量;这很容易实现:
SELECT value, COUNT(entity_id) AS count
FROM catalog_product_index_eav
WHERE attribute_id=190
GROUP BY value;
导致:
+-------+-------+
| value | count |
+-------+-------+
| 22 | 5 |
| 23 | 2 |
| 42 | 1 |
| 54 | 3 |
+-------+-------+
我的问题是如何在此计数中嵌套 OR 条件,即:对于某些 特定 值 Y,对于每个值 X,计算具有值 X 或 Y 的实体的数量。
我想在单个查询中执行此操作。例如,对于attribute_id 190 和value 23,上述示例的输出应为:
+-------+-------+
| value | count |
+-------+-------+
| 22 | 5 | # all entities with value 22 happen to have 23 as well
| 23 | 2 | that is, one is a subset of the other
| 42 | 2 | # intersection is nonempty
| 54 | 5 | # sets are disjoint
+-------+-------+
【问题讨论】:
-
除了只选择特定值之外,您想运行相同的查询吗?
-
没有。考虑导致第一个 [value, count] 表的第一个查询。我想找到一个类似的查询,它会导致上面的第二个 [value, count] 表。它仍然选择所有值,但它有条件地计算 entity_id 的值为 x OR y,而不是计算 entity_id 的值为 x。
-
所以您想要为第一个结果表中的每个值创建一个单独的结果集?
标签: mysql sql magento count group-by