SQL 使用 INNER JOIN 获取 MIN() 和 MAX()
SQL Get MIN() and MAX() with INNER JOIN
此代码有问题
SELECT b.*, MIN(c.seri) as seri_awal, MAX(c.seri) as seri_akhir FROM berkas b
LEFT JOIN certificate c
ON c.berkas_nomor = b.nomor
使用该代码,我想我可以获取与我创建的关系相关的所有数据 (c.berkas_nomor = b.nomor
) 并获取我创建的 table 的 MIN() 和 MAX() 值INNER JOIN
,但是我得到的结果只显示了1条数据(我的期望应该是4条数据)
我的预期结果
nomor
nama
seri_awal
seri_akhir
ASD123
lorem
S0000001
S0000015
ASD321
ipsum
S1000500
S1000525
QWE123
dolor
S3000500
S3000525
QWE321
ameti
S4000001
S4000015
真实结果
nomor
nama
seri_awal
seri_akhir
ASD123
lorem
S0000001
S0000015
我写的代码有问题吗?谢谢
您必须按您想要汇总结果的 2 列进行分组:
SELECT b.nomor, b.nama,
MIN(c.seri) as seri_awal,
MAX(c.seri) as seri_akhir
FROM berkas b LEFT JOIN certificate c
ON c.berkas_nomor = b.nomor
GROUP BY b.nomor, b.nama
子查询部分 returns berkas_nomor 明智的最小值和最大值以及与主要 table berkas 的 JOIN。
SELECT b.nomor, b.nama, t.seri_awal, t.seri_akhir
FROM berkas b
LEFT JOIN (SELECT berkas_nomor
, MIN(seri) seri_awal
, MAX(seri) seri_akhir
FROM certificate
GROUP BY berkas_nomor) t
ON b.nomor = t.berkas_nomor;
如果您在 berkas
中有一个 primary key
,那么您可以将其用于聚合:
SELECT b.*, MIN(c.seri) as seri_awal, MAX(c.seri) as seri_akhir
FROM berkas b LEFT JOIN
certificate c
ON c.berkas_nomor = b.nomor
GROUP BY b.nomor;
MySQL 支持 SQL 标准,您可以在其中按主键聚合但仍使用指定 table.
中的任何列
此代码有问题
SELECT b.*, MIN(c.seri) as seri_awal, MAX(c.seri) as seri_akhir FROM berkas b
LEFT JOIN certificate c
ON c.berkas_nomor = b.nomor
使用该代码,我想我可以获取与我创建的关系相关的所有数据 (c.berkas_nomor = b.nomor
) 并获取我创建的 table 的 MIN() 和 MAX() 值INNER JOIN
,但是我得到的结果只显示了1条数据(我的期望应该是4条数据)
我的预期结果
nomor | nama | seri_awal | seri_akhir |
---|---|---|---|
ASD123 | lorem | S0000001 | S0000015 |
ASD321 | ipsum | S1000500 | S1000525 |
QWE123 | dolor | S3000500 | S3000525 |
QWE321 | ameti | S4000001 | S4000015 |
真实结果
nomor | nama | seri_awal | seri_akhir |
---|---|---|---|
ASD123 | lorem | S0000001 | S0000015 |
我写的代码有问题吗?谢谢
您必须按您想要汇总结果的 2 列进行分组:
SELECT b.nomor, b.nama,
MIN(c.seri) as seri_awal,
MAX(c.seri) as seri_akhir
FROM berkas b LEFT JOIN certificate c
ON c.berkas_nomor = b.nomor
GROUP BY b.nomor, b.nama
子查询部分 returns berkas_nomor 明智的最小值和最大值以及与主要 table berkas 的 JOIN。
SELECT b.nomor, b.nama, t.seri_awal, t.seri_akhir
FROM berkas b
LEFT JOIN (SELECT berkas_nomor
, MIN(seri) seri_awal
, MAX(seri) seri_akhir
FROM certificate
GROUP BY berkas_nomor) t
ON b.nomor = t.berkas_nomor;
如果您在 berkas
中有一个 primary key
,那么您可以将其用于聚合:
SELECT b.*, MIN(c.seri) as seri_awal, MAX(c.seri) as seri_akhir
FROM berkas b LEFT JOIN
certificate c
ON c.berkas_nomor = b.nomor
GROUP BY b.nomor;
MySQL 支持 SQL 标准,您可以在其中按主键聚合但仍使用指定 table.
中的任何列