mysql - sql查询最大值,分组依据
问题描述
我试图让所有学生按 class_id、student_id、teacher_id 分组所以我的意思是这个:
Select id,class_id, student_id,teacher_id, max(active)
FROM student_classes
GROUP BY class_id, student_id, teacher_id
实际上我想要的结果是:
114 137 1 47 1
108 138 2 49 0
113 197 3 47 1
所以基本上问题出在第三排。我得到的不是 id = 113,而是 ID = 111。在这种情况下我该怎么办?你能帮我查询吗
解决方案
如评论中所述,MySQL 允许违反 SQL 标准,允许您在id
包含group by
. 据我所知,它将在每个分组中任意选择一行并显示该id
行的值。
id
如果您有关于要查看哪个值的特定规则,则需要在查询中表达该规则。
顺便说一句,您想要的输出似乎有多个拼写错误(例如 197,它根本不会出现在您的数据中)。
根据您的评论(您应该将其编辑到您的原始问题中)和您想要的输出,我认为您想要的id
列规则是:
- 如果组中有任何 active=1 的行,请从这些行中选择最大 id 值
- 如果组中的所有行的 active=0,则选择最小的 id 值。(您没有具体说明这一点;我假设它是基于您所需输出的第二行存在 108 。)
我认为这个查询会产生这些结果。(并且还消除了非标准的 MySQL 行为。)
SELECT
COALESCE(
MAX(CASE WHEN active=1 THEN id ELSE NULL END),
MIN(id)
) AS some_id
class_id, student_id, teacher_id, max(active)
FROM student_classes
GROUP BY class_id, student_id, teacher_id
推荐阅读
- javascript - 哪个更快?`array.findIndex` vs `array.reduce` + `object[index]`
- html - 是否可以重新定位进入另一个使用引导程序?
- c++ - 如何在 C++ 中统一接口不同的数据类型
- algorithmic-trading - 如何找到烛台形态在 2 小时到 15 分钟时间范围内出现的最大次数
- java - 忽略 XML Unmarshal Java Spring 上的 ESC 特殊字符
- macos - 在 MacOS Catalina for CI 上禁用反恶意软件服务 xprotectservice
- android - Android BroadcastReciever BOOT_COMPLETED SecurityException
- ios - 如何在应用购买订阅 ios 中显示保存百分比?
- reactjs - 如何在功能组件中动态更改字体系列?
- c# - 使用 c# 更改 Windows 键盘布局