mysql - 如何在mysql上显示每组的最后数据(最大数据)
问题描述
我有如下查询:
SELECT kd.id_karir, kd.nama, kd.kelamin,
(YEAR(NOW())-YEAR(tanggal)) usia, MAX(pf.jenis), pf.jenis,
pf.nama AS pendidikan, pf.jurusan, kd.alamat, kd.telepon,
kd.handphone, kd.email, kd.tempat AS tempat_lahir,
kd.tanggal AS tanggal_lahir
FROM keadaan_diri AS kd
LEFT OUTER JOIN pendidikan_formal AS pf ON (kd.id_karir = pf.id_karir)
WHERE kd.id_karir = 'P1409047'
GROUP BY kd.id_karir
ORDER BY kd.nama ASC, pf.jenis DESC
我的意思是使用 max 和 group 返回表上的最后一个数据,pendidikan_formal
但查询不起作用。
解决方案
首先,您可以/应该(取决于 MySQL 配置)仅选择和排序作为group by
子句一部分的列。对于所有其他列,您必须指定一个聚合函数。例如,假设您有两条关于人类的记录,它们的名字相同但年龄不同。当您按名称分组时,您必须选择两个年龄值之一(最大值、最小值、平均值,...)。如果你不在乎哪个,你可以关闭 sql mode only full group by
。但是,我不建议这样做。
然而,为了获得一个具有最大值的记录,分组不是正确的方法。看看这些例子:
子选择:
SELECT name, age, ...
FROM humans
WHERE age=(SELECT MAX(age) FROM humans);
排序和限制:
SELECT name, age, ...
FROM humans
ORDER BY age DESC
LIMIT 1;
左连接:
SELECT name, age, ...
FROM humans h1
LEFT JOIN humans h2 ON h1.age < h2.age
WHERE h2.age IS NULL;
现在,如果您想要每组的所有最大行数,请使用标签best-n-per-group检查这些答案之一。
推荐阅读
- python - Python文件到exe
- javascript - 如何为 aframe 添加播放器对象碰撞?
- ios - 使用临时生成的本机 ipa 文件无法正常工作 ios 13 真实设备
- nginx - NGINX 入站代理/重定向
- sql - ListObject 的 ADO 查询仅返回错误 RecordCount 的 NULL 值
- angular - 如何将角度数字输入限制为 N 个小数位?
- c# - 我可以将来自不同模型的字段添加到 MVC5 中的视图吗
- python - 在 pygame 中对我的乒乓球游戏进行故障排除,我无法使用两个功能
- c++ - 使用 std::pair 对向量中的顶点进行排序
- php - 获取 Twig 开始日期 date_modify