首页 > 解决方案 > 如何在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但查询不起作用。

标签: mysqlsql

解决方案


首先,您可以/应该(取决于 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;

现在,如果您想要每组的所有最大行,请使用标签检查这些答案之一


推荐阅读