如何在 postgresql 中计算 MAX(SUM()) 特别是在下面查询
How to calculate MAX(SUM()) in postgresql in particular to query below
我正在尝试在 PostgreSQL 中获取 MAX(SUM()),这在 PostgreSQL 中是不可能的。我试图通过任何方法得到结果,但无法得到想要的结果。我的 table 是这样的 -
CREATE TABLE user_transactions (
id integer NOT NULL,
user_id bigint,
credit_rupee numeric,
created_at timestamp without time zone,
);
这是样本数据
id credit_rupee user_id date
1 30 72873 2015-03-25
2 10 76296 2015-03-25
3 3 73130 2015-03-26
4 2 73142 2015-03-26
5 8.44 73145 2015-03-26
6 2 72911 2015-03-26
7 5 73158 2015-03-26
8 10 73067 2015-03-26
9 2 76296 2015-03-26
10 1 76296 2015-03-27
11 5.5 73042 2015-03-27
12 2 73042 2015-03-27
在此,我想获得特定日期总和 credit_rupee 最高的用户。
我想要的结果是
user_id max date
72873 30 2015-03-25
73067 10 2015-03-26
73042 5.5 2015-03-27
问题是我不能 select 所有三个 user_id,max(),date 没有 GROUP BY date 和 user_id 这使得很难得到上面提到的结果。
我试过很多组合,比如
SELECT MAX(sum),user_id,date FROM(
SELECT SUM(credit_rupee),user_id,DATE(created_at) FROM user_transactions
GROUP BY user_id,DATE(created_at)
ORDER BY DATE(created_at)) as m
GROUP BY date ORDER BY date;
SELECT DISTINCT(user_id),max,date from(
SELECT MAX(sum),user_id,date FROM(
SELECT SUM(credit_rupee),user_id,DATE(created_at) FROM user_transactions
GROUP BY user_id,DATE(created_at) ORDER BY DATE(created_at)) as m
GROUP BY DATE,user_id ORDER BY date) as x
GROUP BY date,user_id
等等,但是无论怎样尝试都得不到我想要的结果。
任何人都可以帮助我如何得出结果吗?
谢谢
在子查询中聚合并在外部使用distinct on
:
select distinct on (1, 2)
date, user_id, credit_ruppe
from (
select user_id, date, sum(credit_ruppe) as credit_ruppe
from sample s
group by 1, 2
) s
order by date, user_id, credit_ruppe desc
http://www.postgresql.org/docs/current/static/sql-select.html#SQL-DISTINCT
此查询将为您提供您想要的信息:
SELECT user_id,
credit_rupee,
created_at from
(SELECT
rank() OVER (PARTITION BY created_at ORDER BY credit_rupee DESC) AS rank,
user_id, credit_rupee, created_at
FROM user_transactions ) sq
WHERE rank=1;
我正在尝试在 PostgreSQL 中获取 MAX(SUM()),这在 PostgreSQL 中是不可能的。我试图通过任何方法得到结果,但无法得到想要的结果。我的 table 是这样的 -
CREATE TABLE user_transactions (
id integer NOT NULL,
user_id bigint,
credit_rupee numeric,
created_at timestamp without time zone,
);
这是样本数据
id credit_rupee user_id date
1 30 72873 2015-03-25
2 10 76296 2015-03-25
3 3 73130 2015-03-26
4 2 73142 2015-03-26
5 8.44 73145 2015-03-26
6 2 72911 2015-03-26
7 5 73158 2015-03-26
8 10 73067 2015-03-26
9 2 76296 2015-03-26
10 1 76296 2015-03-27
11 5.5 73042 2015-03-27
12 2 73042 2015-03-27
在此,我想获得特定日期总和 credit_rupee 最高的用户。
我想要的结果是
user_id max date
72873 30 2015-03-25
73067 10 2015-03-26
73042 5.5 2015-03-27
问题是我不能 select 所有三个 user_id,max(),date 没有 GROUP BY date 和 user_id 这使得很难得到上面提到的结果。
我试过很多组合,比如
SELECT MAX(sum),user_id,date FROM(
SELECT SUM(credit_rupee),user_id,DATE(created_at) FROM user_transactions
GROUP BY user_id,DATE(created_at)
ORDER BY DATE(created_at)) as m
GROUP BY date ORDER BY date;
SELECT DISTINCT(user_id),max,date from(
SELECT MAX(sum),user_id,date FROM(
SELECT SUM(credit_rupee),user_id,DATE(created_at) FROM user_transactions
GROUP BY user_id,DATE(created_at) ORDER BY DATE(created_at)) as m
GROUP BY DATE,user_id ORDER BY date) as x
GROUP BY date,user_id
等等,但是无论怎样尝试都得不到我想要的结果。 任何人都可以帮助我如何得出结果吗? 谢谢
在子查询中聚合并在外部使用distinct on
:
select distinct on (1, 2)
date, user_id, credit_ruppe
from (
select user_id, date, sum(credit_ruppe) as credit_ruppe
from sample s
group by 1, 2
) s
order by date, user_id, credit_ruppe desc
http://www.postgresql.org/docs/current/static/sql-select.html#SQL-DISTINCT
此查询将为您提供您想要的信息:
SELECT user_id,
credit_rupee,
created_at from
(SELECT
rank() OVER (PARTITION BY created_at ORDER BY credit_rupee DESC) AS rank,
user_id, credit_rupee, created_at
FROM user_transactions ) sq
WHERE rank=1;