postgresql 不同的字段值计数
获取字段中的不同值是一个重要的查询。本篇文章讨论如何获取字段中值的不同计数。
获取 postgresql 中字段值的不同计数
考虑一个 quiz_score
表,它记录了问答游戏中每个参与者的分数。
id | player_id | score |
---|---|---|
1 | 1 | 10 |
2 | 2 | 10 |
3 | 3 | 18 |
4 | 4 | 69 |
5 | 5 | 24 |
6 | 6 | 67 |
7 | 7 | 94 |
8 | 8 | 68 |
9 | 9 | 33 |
10 | 10 | 5 |
下面是表的 create
语句:
createtablequiz_score(idintegernotnullgeneratedalwaysasidentity,player_idintegernotnull,scoreintegernotnull,constraintquiz_score_pkeyprimarykey(id));
这是用数据填充表的 insert
语句:
insertintoquiz_score(player_id,score)selecti,floor(random()*(100-01))fromgenerate_series(1,10000000)i;
我们已将一千万个随机分数插入到我们的表中。让我们通过运行以下查询来找出表中有多少不同的分数:
selectcount(distinctscore)fromquiz_score;
此查询耗时 3 秒 391 毫秒,计数为 101 个不同的值。
我们还可以运行这个其他查询来查找表中不同分数的数量:
selectcount(*)from(selectdistinctscorefromquiz_score)asdistinctscores;
这个新查询花费了 1 秒和 572 毫秒,计数了 101 个不同的值。
如我们所见,第二个查询更快。任何一个查询都可以正常工作,但在这种情况下,第二个查询更快。
根据 postgresql 中的另一个字段获取字段值的不同计数
我们现在将介绍一个名为 expertise
的新栏目。该字段是根据玩家的得分填充的。
expertise
值是:beginner
、intermediary
、expert
和 master
。玩家的专长由玩家的分数决定,如下所示:
expertise | score |
---|---|
beginner | 0 - 50 |
intermediary | 51 - 80 |
expert | 81 - 90 |
master | 91 - 100 |
新更新的 quiz_score
表是:
id | player_id | score | player_rank |
---|---|---|---|
1 | 1 | 10 | beginner |
2 | 2 | 10 | beginner |
3 | 3 | 18 | beginner |
4 | 4 | 69 | intermediary |
5 | 5 | 24 | beginner |
6 | 6 | 67 | intermediary |
7 | 7 | 94 | master |
8 | 8 | 68 | intermediary |
9 | 9 | 33 | beginner |
34 | 34 | 89 | expert |
这是用于将新列添加到表中的 alter table
语句:
altertablequiz_scoreaddcolumnexpertisetext;
这是填充专业知识领域的 update
语句:
updatequiz_scoresetexpertise=(casewhenscore>=0andscore<=50then'beginner'whenscore>50andscore<=80then'intermediary'whenscore>80andscore<=90then'expert'whenscore>90then'master'end);
在前面的示例中,我们查看了表中不同的分数。在此示例中,让我们通过运行以下查询来找出表中每种专业知识有多少不同的分数:
selectexpertise,count(distinctscore)fromquiz_scoregroupbyexpertise
结果如下:
expertise | count
-------------- -------
beginner | 51
intermediary | 10
expert | 30
master | 10
从这个查询中,我们可以看出 beginner
专业有 51 个不同的分数,intermediary
有 10 个不同的分数,expert
有 30 个不同的分数,而 master
有 10 个不同的分数。查询耗时 14 秒和 515 毫秒。
我们还可以运行这个其他查询来查找表中不同分数的数量:
selectdistincton(expertise)expertise,count(distinctscore)fromquiz_scoregroupbyexpertise
这个新查询耗时 12 秒和 165 毫秒。在第二个示例中,第二个查询更快,但任何一个查询都可以正常工作。
在本篇文章中,我们讨论了如何在一个字段中获取不同的值,以及如何根据另一个字段的不同值在一个字段中获取不同的值。
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
在一个 postgresql 查询中使用多个 with 语句
发布时间:2023/03/20 浏览次数:337 分类:postgresql
-
在本教程中,我们将学习如何使用多个 with 语句在 postgresql 中使用两个临时表执行查询。
发布时间:2023/03/20 浏览次数:185 分类:postgresql
-
本文介绍如何在 ubuntu 上找到 postgresql 数据库的配置文件。
发布时间:2023/03/20 浏览次数:409 分类:数据库
-
本文解释了如何直接从终端/命令行或 psql shell 运行 sql 文件。为此,你需要指定主机名、端口、用户名和数据库名称。
发布时间:2023/03/20 浏览次数:89 分类:postgresql
-
本文展示了如何列出 postgresql 上的活动连接。
发布时间:2023/03/20 浏览次数:966 分类:postgresql
-
在 pl/sql 中,你可能需要在 postgres 中使用循环。我们可以使用 for 和 while 语句来创建循环。
发布时间:2023/03/20 浏览次数:141 分类:postgresql
-
本文介绍如何在 postgresql 中仅使用单个查询来重命名列以及更改其类型。
发布时间:2023/03/20 浏览次数:233 分类:postgresql
-
本文介绍如何在 postgresql 中使用 select 方法连接列。
发布时间:2023/03/20 浏览次数:281 分类:postgresql
-
本文展示了如何使用 case 语句并给出了 postgresql 中的示例。