程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何从 PostgreSQL 中的聚合计数中获取顶级名称?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_801_0@如何解决如何从 POSTGReSQL 中的聚合计数中获取顶级名称?? 开发过程中遇到如何从 POSTGReSQL 中的聚合计数中获取顶级名称?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何从 POSTGReSQL 中的聚合计数中获取顶级名称?的解决方法建议,希望对你解决如何从 POSTGReSQL 中的聚合计数中获取顶级名称?有所启发或帮助;

我有 3 张桌子

  1. 用户
  2. coin_history
  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,请注明来意。