同一 table 中多个字段的累计不同计数
Cumulative distinct count of multiple fields in the same table
我有一个 属性 数据库,我目前正在设计一个查询以获取属性的其他特征。在这种情况下,有问题的两个 table 是 those:
这是第一个特征 table,基本上是我为每个特征存储元数据的地方。
这是我存储特定特征的关系和最终值的 CharacteristicsPerProperty 数据库。
所以基本上我想做的是计算所有独特的 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)
问题是这个查询 returns 0.
如果我将 AND 切换为 OR,它会得到 returns 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;
我有一个 属性 数据库,我目前正在设计一个查询以获取属性的其他特征。在这种情况下,有问题的两个 table 是 those:
这是第一个特征 table,基本上是我为每个特征存储元数据的地方。
这是我存储特定特征的关系和最终值的 CharacteristicsPerProperty 数据库。
所以基本上我想做的是计算所有独特的 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)
问题是这个查询 returns 0.
如果我将 AND 切换为 OR,它会得到 returns 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;