gpt4 book ai didi

java - 如何计算具有特定值和特定用户/人(行中)的数据?

转载 作者:行者123 更新时间:2023-11-29 13:18:05 25 4
gpt4 key购买 nike

我有一个问题,我无法处理...

我的 PostgreSQL 表如下所示:

id student grade class gradeDate
1 1 5 1 2017-03-03
2 1 5 1 2017-03-04
3 1 1 1 2017-03-05
4 1 5 1 2017-03-06
5 1 5 1 2017-03-07
6 1 5 1 2017-03-08
7 1 1 1 2017-03-09
8 2 5 2 2017-03-03
9 3 5 3 2017-03-03

所以我在不同的类(class) (1,2,3,4...) 有不同的学生 (1,2,3...),他们每天都获得成绩 (gradeDate) - 它只能是 5 或 1 - 现在我想从这个数据库中为每个学生选择连续 5 年级的最大数量(连续我的意思是每天不休息的 5 年级)因此,在上表中,用户 1 的最大计数为 3(第 4、5、6 行),用户 2 的最大计数为 1,用户 3 的最大计数为 1。如果我将第 3 行的成绩更改为 5,则学生 1 的最大计数将为 6你明白了吗?

起初我想以某种方式使用 SELECT 查询,但首先 - 我不知道如何进行此查询,其次 - 当此中将有数千或数百万行时表,那查询的效率会非常非常低。我通常可以获取学生 1 的每一行并用 Java 对其进行操作。所以我问 - 我该如何解决这个问题?感谢您的时间和精力。

最佳答案

您需要确定相邻的组。一种简单的方法是行号的差异。要真正理解它,您需要运行子查询并查看结果。您应该“看到”差异如何定义组。

select student, class, grade, count(*), min(gradeDate), max(gradeDate)
from (select t.*,
row_number() over (partition by student, class, grade order by gradeDate) as seqnum_scg,
row_number() over (partition by student, class order by gradeDate) as seqnum_sc
from t
) t
group by student, class, grade, (seqnum_sc - seqnum_scg);

要获得最大值,您可以使用 distinct on。我将为此使用子查询:

select distinct on (student, class) scg.*
from (select student, class, grade, count(*) as cnt,
min(gradeDate), max(gradeDate), min_gradeDate, max_gradeDate
from (select t.*,
row_number() over (partition by student, class, grade order by gradeDate) as seqnum_scg,
row_number() over (partition by student, class order by gradeDate) as seqnum_sc
from t
) t
where grade = 5
group by student, class, grade, (seqnum_sc - seqnum_scg)
) scg
order by student, class, cnt desc;

关于java - 如何计算具有特定值和特定用户/人(行中)的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46245647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com