【发布时间】:2015-11-28 12:32:59
【问题描述】:
我正在尝试通过二维参数获取用户的排名:donation sum 和 total donor count。
我的排名公式是:rank of [rank of donation_sum + rank of donor_count / 2]
示例表:
donation_id | user_id | donor_id | donation_sum
-----------------------------------------------
1 | 1 | 1 | 10
2 | 1 | 2 | 5
3 | 2 | 3 | 10
4 | 3 | 1 | 50
...
如您所见,有些捐赠者向不同的用户捐款,所以我使用sum(donation_sum) 和count(distinct(donation_id)) 来获得准确的排名
我可以通过捐赠总额和捐赠者总数使用 2 个 sql 分别获得排名列表,但我需要通过 postgreSQL v. 9.4 中给定的user_id 使用上述公式获得用户排名
你有什么解决办法吗?所以我将在 Yii2 PHP 框架中使用该 sql 查询
谢谢
编辑: 我们在 tbl_donation 中添加了donation_date 并修改了实际查询如下:
wheredonation_date 是真的用法吗?
with list as (
select
s.runner_id, sum, count, rank_sum, rank_count,
(rank_sum+ rank_count)::float/ 2 as rank_avg,
row_number() over (order by rank_sum) as rank
from (
select *, rank() over (order by sum desc) rank_sum
from (
select runner_id, sum(donation_sum)
from tbl_donation
where donation_date >= '2015-01-01'
group by 1
) s
) s
join (
select *, rank() over (order by count desc) rank_count
from (
select runner_id, count(distinct(donator_id))
from tbl_donation
where donation_date >= '2015-01-01'
group by 1
) c
) c
using (runner_id)
)
select rank
from list
where runner_id = 251;
【问题讨论】:
标签: php sql postgresql yii2