SQL中使用MAX与DISTINCT查询每个employee no对应最大credit no的全量记录
你之前使用的GROUP BY语句仅会返回employee no和对应最大credit no两个字段,无法返回该行的其余全部字段,因此无法拿到完整行记录。下面是两种常用的正确写法:
方案1:窗口函数写法(适用MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的主流数据库)
SELECT * FROM ( SELECT *, -- 按员工号分组,组内按credit号倒序排序,第一条就是最大credit号对应的行 ROW_NUMBER() OVER (PARTITION BY `employee no` ORDER BY `credit no` DESC) AS rn FROM mytable ) t WHERE rn = 1;
如果同一个员工存在多条相同最大credit no的记录,且你需要全部返回,把ROW_NUMBER()替换为RANK()即可。
方案2:子查询关联写法(兼容所有数据库版本,包括低版本MySQL)
先聚合得到每个员工的最大credit no,再关联回原表匹配完整行数据:
SELECT t1.* FROM mytable t1 INNER JOIN ( SELECT `employee no`, MAX(`credit no`) AS max_credit FROM mytable GROUP BY `employee no` ) t2 ON t1.`employee no` = t2.`employee no` AND t1.`credit no` = t2.max_credit;
注意:你的字段名包含空格,SQL中需要用反引号(MySQL环境)或双引号(PostgreSQL、SQL Server等环境)包裹,避免触发语法错误。
内容的提问来源于stack exchange,提问作者Lili Z
相关产品推荐
相关产品推荐

