sql - 限制行,但如果结果的值等于则增加

标签 sql postgresql limit

我有两个表:hospede 和 hospedagem。 我试图将结果限制为具有最高值的 3 行,而不仅仅是“限制 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

最佳答案

使用 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 个。

关于sql - 限制行,但如果结果的值等于则增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33468227/

相关文章:

sql - 在 SQL Server 2008 R2 中使用游标更新

c# - LINQ 的嵌套组

postgresql - 将 Postgres 包装成专用的 Phoenix App

java - 属性 'driverClassName' 抛出异常;嵌套异常是 java.lang.IllegalStateException : Could not load JDBC driver class

mysql - mysql中Limit的使用

mysql限制子查询

java - 如何将 java.time.Duration 转换为 java.sql.Time?

sql - 在where子句中比较smallint时遇到问题

django - 具有多种变体的产品

MySQL获取2%的记录