gpt4 book ai didi

mysql - 同一个表中多个字段的累计非重复计数

转载 作者:行者123 更新时间:2023-11-29 09:30:55 25 4
gpt4 key购买 nike

我有一个属性数据库,目前正在设计一个查询以获取属性的其他特征。在这种情况下,有问题的两个表是:

这是第一个特征表,基本上是我存储每个特征的元的地方。

Characteristics table

这是 CharacteristicsPerProperty 数据库,我在其中存储特定特征的关系和最终值。

CharacteristicsPerProperty Table

所以基本上我想要做的是计算所有唯一的 id_propiedad (property_id),以便我可以显示我有多少个具有该特定特征的可用。查询如下

SELECT 
COUNT(DISTINCT(CaracteristicasPorPropiedad.id_propiedad)) AS disponibles
FROM
CaracteristicasPorPropiedad
WHERE
CaracteristicasPorPropiedad.id_caracteristica = 1
AND
CaracteristicasPorPropiedad.valor = 3

所以基本上输出是这样的:

| disponibles |
|=============|
| 264 |

到目前为止一切都按预期工作,但我还可以包含另一个参数,假设在前面的示例中我包含了 Recámaras(卧室),但我还想包含 Baños(浴室)。我试过了

SELECT 
COUNT(DISTINCT(CaracteristicasPorPropiedad.id_propiedad))
FROM
CaracteristicasPorPropiedad
WHERE
(CaracteristicasPorPropiedad.id_caracteristica = 1 AND CaracteristicasPorPropiedad.valor = 3)
AND
(CaracteristicasPorPropiedad.id_caracteristica = 2 AND CaracteristicasPorPropiedad.valor = 2.5)

问题是这个查询返回 0。

如果我将 AND 切换为 OR,则会返回 282 个结果。我基本上需要两者的结合。我有点坚持这个。混合多个级别的查询可能是什么?它可以与此特性的所有 10 个可用维度一起使用。

最佳答案

您可以使用聚合获取id_propiedad:

SELECT cpd.id_propiedad
FROM CaracteristicasPorPropiedad cpd
WHERE (cpd.id_caracteristica = 1 AND cpd.valor = 3) OR
(cpd.id_caracteristica = 2 AND cpd.valor = 2.5)
GROUP BY cpd.id_propiedad
HAVING COUNT(DISTINCT cpd.id_caracteristica) = 2;

如果您想要计数,请使用子查询:

SELECT COUNT(*)
FROM (SELECT cpd.id_propiedad
FROM CaracteristicasPorPropiedad cpd
WHERE (cpd.id_caracteristica = 1 AND cpd.valor = 3) OR
(cpd.id_caracteristica = 2 AND cpd.valor = 2.5)
GROUP BY cpd.id_propiedad
HAVING COUNT(DISTINCT cpd.id_caracteristica) = 2
) p;

关于mysql - 同一个表中多个字段的累计非重复计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58773307/

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