大佬教程收集整理的这篇文章主要介绍了如何从 PostgreSQL 中的聚合计数中获取顶级名称?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有 3 张桌子
用户表数据看起来像
ID | email
------------------
1 | abc@test.com
coin_history
ID | from_user_iD | coin_ID
----------------------
1 | 1 | 2
1 | 1 | 2
1 | 1 | 3
硬币
ID | name
------------
2 | lira
3 | Bitcoin
我的预期输出
Email | @R_140_10586@l_given | top_coin_name
============================================
abc@test.com | 3 | lira
写下查询后,我可以通过电子邮件获得 @R_140_10586@l_given 计数
SELECT
users.email
from_user_iD,count (coin_ID)
FROM
coin_historIEs
INNER JOIN users
ON coin_historIEs.from_user_iD = users.ID
GROUP BY
from_user_iD,users.email
ORDER BY
count desc
如何获取用户提供的顶级硬币名称?
@H_801_0@解决方法您可以在单个语句中计算给定的硬币总数和每个用户的最高数量:
SELEct from_user_id,coin_id,sum(count(*)) over (partition by from_user_id) as @R_140_10586@l_given,dense_rank() over (partition by from_user_id order by count(*) desc) as rnk
from coin_histories
group by from_user_id,coin_id
这首先计算给每个用户的硬币数量和硬币 id。 window functions (over (...)
) 在 group by
之后求值。因此,sum()
为我们提供了每个用户的总行数,而 dense_rank()
评估给定的每个硬币的排名,以便我们可以选择最高的一个。
对于您的充足数据,上面的查询返回以下内容:
from_user_id | coin_id | @R_140_10586@l_given | rnk
-------------+---------+-------------+----
1 | 2 | 3 | 1
1 | 3 | 3 | 2
这个查询可以结合用户和硬币表来得到你想要的:
SELEct u.id,u.email,tp.@R_140_10586@l_given,c.name
from users u
join (
SELEct from_user_id,dense_rank() over (partition by from_user_id order by count(*) desc) as rnk
from coin_histories
group by from_user_id,coin_id
) tp on tp.from_user_id = u.id and tp.rnk = 1
join coins c on c.id = tp.coin_id
;
Online example
,***COUNT() 函数返回 SELECT 语句返回的行数,包括 NULL 和重复。
选择
COUNT(*)
来自
表名
哪里
条件;
代码语言:SQL(结构化查询语言)(sql) 当您将 COUNT() 函数应用于整个表时,POSTGReSQL 必须按顺序扫描整个表。 如果在大表上使用 COUNT() 函数,查询会很慢。这与 POSTGReSQL MVCC 实现有关。由于多个事务同时看到不同状态的数据,因此 COUNT() 函数无法直接对整个表进行计数,因此 POSTGReSQL 必须扫描所有行。***
以上是大佬教程为你收集整理的如何从 PostgreSQL 中的聚合计数中获取顶级名称?全部内容,希望文章能够帮你解决如何从 PostgreSQL 中的聚合计数中获取顶级名称?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。