Postgres选择查询

时间:2016-09-05 18:32:45

标签: sql postgresql

我有这个问题:

  

找到至少有3种不同速度的PC标记

使用此查询:

select p.marker,p.type,speed
    from product as p
    join pc  as pc on(p.model = pc.model)
    order by marker,speed

我可以看到包含所有标记,模型及其特定速度的表格。但是,如何只显示超过3种速度的标记?使用此查询,我可以识别哪个标记超过3,但我希望在答案中准确地查询。所以它将只返回我想要的标记

3 个答案:

答案 0 :(得分:0)

GROUP BYHAVING子句一起使用就足够了。

如果您需要针对不同速度的解决方案,请使用count(distinct speed) >= 3替换条件。

select p.marker, p.type
from product as p
join as pc on p.model = pc.model
group by 1,2
having count(pc.speed) >= 3
order by 1,2

group和order by中的数字有效地映射到select子句中提到的列。

答案 1 :(得分:0)

您需要COUNT(),然后执行JOIN

select p.marker,p.type, xxx.speed
    from product as p
    join (select count(distinct speed) as speed, model
          from pc
          group by model
          having count(distinct speed > 3) xxx on p.model = xxx.model
    order by p.marker,xxx.speed;

答案 2 :(得分:0)

如果您需要有关marker的信息,那么该信息应该在group by子句中 - 而不是其他内容。其余的只是一个having子句和join组合表:

select p.marker, count(distinct speed) as num_speeds
from product p join
     pc 
     on p.model = pc.model
group by p.marker
having count(distinct speed) >= 3;
相关问题