首页 > 解决方案 > 如何按用户 ID 对表进行分组并获取另一列的最大值?

问题描述

我有一个表(bitnami moodle 中的 scrom_scoes_track 表),其中包括用户 ID 和值列。表的结构如下。

表结构

我想找到每个用户的最大标记。可以使用以下查询找到用户的标记。

SELECT 
   `userid`,
   `value`
FROM 
  `mdl_scorm_scoes_track` 
WHERE 
  `element`= 'cmi.core.score.raw' 

上述查询的结果如下。 查询结果1

但是当我尝试使用以下查询获取最大值时,它不会按预期工作。

SELECT 
   `userid`,
   MAX(`value`) 
FROM 
   `mdl_scorm_scoes_track` 
WHERE 
   `element`= 'cmi.core.score.raw' 
GROUP BY 
   `userid` 

上述查询的结果。 查询结果2

这里第一行是用户 ID 2 和值 50。但用户 ID 2 的最大值应该是 100。(如第二张图所示)。对此问题的任何帮助都将受到高度赞赏。

标签: mysqlsqlselect

解决方案


不要对数字字段使用长文本。或者在下面使用

SELECT `userid`,MAX(cast(`value` as unsigned)) FROM `mdl_scorm_scoes_track` WHERE `element`= 'cmi.core.score.raw' GROUP BY `userid` 

推荐阅读