首页 > 解决方案 > 比较单个表的 SELECT 查询

问题描述

我正在使用一个包含大约 2000-3000 行的车辆表,其中包含一个车辆品牌/型号以及一个状态(有许多不同的状态,我担心“T”和“Y”)。我想创建一个查询,该查询将返回与条目具有相同品牌/型号但状态不同的车辆数量。例如:

INSERT INTO my_db(make, model, status) VALUES ("BMW", "6-SERIES", "T")
INSERT INTO my_db(make, model, status) VALUES ("BMW", "6-SERIES", "Y")
INSERT INTO my_db(make, model, status) VALUES ("BMW", "6-SERIES", "Y")

我希望我的查询返回“1”,因为我们有一辆宝马 6 系,在某些时候与 T 和 Y 匹配。我怎样才能做到这一点?我试图创建两个单独的表并进行连接,还尝试了一个子选择,但我似乎无法让它工作。

编辑:我应该澄清一下 - 如果品牌/型号有 T 和 Y 的条目,我只希望它添加到计数中,而不是一般的不同状态。

标签: sqlpostgresql

解决方案


如果你想计算行数count(*),你可以使用:exists

select count(*)
from my_db d1
where exists (select 1
              from my_db d2
              where d2.make = d.make and d2.model = d.model and
                    d2.status <> d.status
             );

如果您想计算品牌/型号组合,我会建议两个级别的聚合:

select count(*)
from (select make, model
      from t
      group by make, model
      having min(status) <> max(status)
     ) mm;

推荐阅读