gpt4 book ai didi

sql - 当查询包含聚合函数时,如何在查询结果中对列进行 'add'?

转载 作者:行者123 更新时间:2023-12-04 14:42:16 25 4
gpt4 key购买 nike

我有一个名为“出勤”的表格,该表格用于记录学生在类(class)中的出勤时间。该表有4列,分别是“id”,“course_id”,“attattance_time”和“student_name”。该表中的一些记录的示例是:

23 2010年1月1日10:10:00汤姆

24 2010年1月1日10:20:00鲍勃

25 187年1月2日08:01:01丽莎

.....

我想为每个类(class)的最新出勤时间创建一个摘要。我在下面创建了一个查询:

SELECT course_id, max(attendance_time) FROM attendance GROUP BY course_id

结果将是这样的

100 2010年1月1日10:20:00

187 2010年1月2日08:01:01

现在,我要做的就是将“id”列添加到上面的结果中。怎么做?

我不能只是将命令更改为这样的内容
SELECT id, course_id, max(attendance_time) FROM attendance GROUP BY id, course_id

因为它将返回所有记录,就好像未使用聚合函数一样。请帮我。

最佳答案

这是典型的“每组最大数量”,“每组最大数量”或“逐组最大”查询,几乎每天都会在堆栈溢出中出现。您可以在Stack Overflow中搜索这些术语,以找到许多不同的示例,说明如何使用不同的数据库解决此问题。解决它的一种方法如下:

SELECT
T2.course_id,
T2.attendance_time
T2.id
FROM (
SELECT
course_id,
MAX(attendance_time) AS attendance_time
FROM attendance
GROUP BY course_id
) T1
JOIN attendance T2
ON T1.course_id = T2.course_id
AND T1.attendance_time = T2.attendance_time

请注意,如果有多行具有相同的attenance_time,则该查询理论上可以为每个course_id返回多行。如果那不可能发生,那么您不必担心这个问题。如果这是一个潜在问题,则可以通过在course_id,attenance_time上添加额外的分组并选择最小或最大id来解决此问题。

关于sql - 当查询包含聚合函数时,如何在查询结果中对列进行 'add'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3332922/

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