限制行,但如果结果的值等于则增加
Limit rows but increase if the result have values equals
我有两个表: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
使用 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()
将 return 前七行。 rank()
只会 return 前四个。 row_number()
会 return 前 3.
我有两个表: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
使用 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()
将 return 前七行。 rank()
只会 return 前四个。 row_number()
会 return 前 3.