gpt4 book ai didi

mysql - 如何在 SQL 中有条件地计算值

转载 作者:可可西里 更新时间:2023-11-01 08:39:40 25 4
gpt4 key购买 nike

我有一个实体属性值的索引表,如下所示:
+------------+------------+--------+--------+
|实体编号 |属性编号 |店铺编号 |值(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_id 38 有 value 22,23)并且这些值不是唯一的实体(entity_id 38,39 都共享 value 22)。

要解决的第一个问题是获取每个值的不同实体的数量;这很容易实现:

SELECT value, COUNT(entity_id) AS count
FROM catalog_product_index_eav
WHERE attribute_id=190
GROUP BY value;

结果是:
+------+------+
|值(value) |计数 |
+------+------+
| 22 | 5 |
| 23 | 2 |
| 42 | 1 |
| 54 | 3 |
+------+------+

我的问题是如何在此计数中嵌套 OR 条件,即:对于某些特定 值 Y,对于每个值 X,计算具有值 X 或 Y 的实体的数量。

我想在单个查询中执行此操作。例如,对于 attribute_id 190 和 value 23,上述示例的输出应为:
+------+------+
|值(value) |计数 |
+------+------+
| 22 | 5 | # 所有值为 22 的实体恰好也有 23
| 23 | 2 |也就是说,一个是另一个的子集
| 42 | 2 | # 交集是非空的
| 54 | 5 | # 集合是不相交的
+------+------+

最佳答案

select c1.value, 
( SELECT COUNT(DISTINCT entity_id) as count
FROM catalog_product_index_eav
where attribute_id=81
and (value=c1.value || value=7) ) as count
FROM catalog_product_index_eav c1
WHERE attribute_id=81
GROUP BY c1.value

关于mysql - 如何在 SQL 中有条件地计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38928716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com