Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 同一表中多个字段的累计不同计数_Mysql_Sql_Count_Distinct - Fatal编程技术网

Mysql 同一表中多个字段的累计不同计数

Mysql 同一表中多个字段的累计不同计数,mysql,sql,count,distinct,Mysql,Sql,Count,Distinct,我有一个属性数据库,目前正在为属性的其他特征设计查询。在这种情况下,有问题的两个表格是: 这是第一个特征表,基本上是我存储每个特征的元的地方 这是CharacteristicsPerProperty数据库,我在其中存储特定特征的关系和最终值 因此,基本上我想做的是计算所有唯一的id\u-propiedad(属性\u-id),这样我就可以显示我有多少具有该特定特征的可用属性。查询如下所示 选择 将(不同的(CaracteristicasPorPropiedad.id_propiedad))作为

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

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

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

因此,基本上我想做的是计算所有唯一的
id\u-propiedad
属性\u-id
),这样我就可以显示我有多少具有该特定特征的可用属性。查询如下所示

选择
将(不同的(CaracteristicasPorPropiedad.id_propiedad))作为可争议项进行计数
从…起
拟孢子虫
哪里
CaracteristicasPorPropiedad.id_caracteristica=1
及
Caracteristicaspropiedad.valor=3
所以基本上,输出是这样的:

| disponibles |
|=============|
| 264         |
到目前为止,一切都按预期进行,但我还可以包括另一个参数,比如在前面的示例中,我包括了Recámaras(卧室),但我还想包括Baños(浴室)。我试过了

选择
计数(不同(CaracteristicasPorPropiedad.id_propiedad))
从…起
拟孢子虫
哪里
(CaracteristicasPorPropiedad.id_caracteristica=1和CaracteristicasPorPropiedad.valor=3)
及
(CaracteristicasPorPropiedad.id_caracteristica=2和CaracteristicasPorPropiedad.valor=2.5)
问题是这个查询返回0


如果我将AND切换到OR,它将返回282个结果。我基本上需要两者的结合。我有点受不了了。什么样的查询可以混合多个级别的查询?它可以与此特征的所有10个可用维度一起使用。

您可以使用聚合获得
id\u 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标记。
CaracteristicasPorPropiedad.id\u caracteristica=1和CaracteristicasPorPropiedad.id\u caracteristica=2
。这怎么可能是真的???它将始终返回false,因此它不会返回任何行,因此
count()
将始终为0。@Eric我知道,关于如何在这两个条件下进行计数,有什么建议吗?您的逻辑是什么?你想得到什么?但在这种情况下,我想要的条件是,属性符合两个标准,而不是一个或另一个,这是我的问题。我上面提到的查询与
一起使用,而不是
为我提供了与第二个查询相同的数字,但它应该减少而不是增加该数字。一个条件返回264个结果,两个条件返回282个结果。@MihailMinkov。这只返回同时具有这两个条件的
id\u propiedad
。我不确定我是否遵循,在这种情况下,如果我使用条件A或条件B,这意味着它将以A或B作为参数来计算属性,不一定两者都是。这意味着,如果我计算条件A和条件B,它将计算同时具有条件A和条件B的属性,这正是我所需要的。这就是我想要实现的。@MihailMinkov。那是因为如果没有
子句,它就没有意义。哇,一个人每天都在学习新的东西。谢谢戈登!为了澄清,我必须用我需要的特征数更新
HAVING COUNT(DISTINCT cpd.id\u caracteristica)=2
,对吗?