【问题标题】:Limit rows but increase if the result have values equals限制行,但如果结果的值等于则增加
【发布时间】:2015-11-01 23:02:23
【问题描述】:

我有两张桌子:hospede 和 hospedagem。 我试图将结果限制为 3 行具有最高值,而不仅仅是“limit 3”。因此,如果“sum”的某些结果具有相同的值,则应增加最大结果行数。

当前结果:

"Sao Paulo";810.40
"Porto Alegre";810.40
"Cascavel";740.40
"Ijui";680.40
"Itapema";540.00

预期结果:

"Sao Paulo";810.40
"Porto Alegre";810.40
"Cascavel";740.40
"Ijui";680.40

我的谦虚问题:

select      cidade "Cidade", 
            sum(valorDiaria * (dataSaida - dataEntrada)) "Valor Total"
from        hospedagem h1, hospede h2
where       h1.codHospede = h2.codHospede
and         CURRENT_DATE - interval '3 months' < dataEntrada
group by    "Cidade"
order by    "Valor Total" desc

【问题讨论】:

    标签: sql postgresql limit


    【解决方案1】:

    使用dense_rank()rank(),具体取决于您要如何处理关系:

    select "Cidade", "Valor Total"
    from (select cidade as "Cidade", 
                 sum(valorDiaria * (dataSaida - dataEntrada)) as  "Valor Total",
                 dense_rank() over (order by sum(valorDiaria * (dataSaida - dataEntrada)) desc) as seqnum
          from hospedagem h1 join hospede h2
               on h1.codHospede = h2.codHospede
          where CURRENT_DATE - interval '3 months' < dataEntrada
          group by "Cidade"
         ) hh
    where seqnum <= 3;
    

    如果您的数据是:

    100
    100
    100
    100
     90
     90
     80
     79
    

    然后dense_rank() 将返回前七行。 rank() 只会返回前四个。 row_number() 将返回前 3 个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多