我有包含以下列和数据的表
filename1 filename2 hd
S5000L00.dat S5111L01.dat 0.46
S5111L00.dat S5000L01.dat 0.46
S5001L00.dat S5002L01.dat 0.47
S5002L00.dat S5001L01.dat 0.47
S5003L00.dat S5002L01.dat 0.38
S5002L00.dat S5003L01.dat 0.38
S5000L00.dat S5000L01.dat 0.21*
S5002L00.dat S5002L01.dat 0.42
S5002L01.dat S5000L00.dat 0.42
S5001L00.dat S5000L03.dat 0.24
现在我想按 filename1 进行分组,并查看每个文件的最低hd
当我运行以下查询时
Select filename1, filename2, min(hd) as hd
from data group by filename1
order by hd asc;
我得到了以下结果
filename1 filename2 hd
S5000L00.dat S5111L01.dat 0.21*
S5001L00.dat S5002L01.dat 0.24
S5003L00.dat S5002L01.dat 0.38
S5002L00.dat S5001L01.dat 0.38
S5002L01.dat S5000L00.dat 0.42
S5111L00.dat S5000L01.dat 0.46
已加星标的行是问题所在。在表中,filename2是S5000L01.dat但在结果集中 filname2 是S5111L01.dat。我想要相同的文件名,但我无法形成查询。
由于
答案 0 :(得分:1)
使用JOIN
:
SELECT
g.filename1,
data.filename2,
g.hd
FROM
data
INNER JOIN
(SELECT
filename1,
min(hd) AS hd
FROM
data
GROUP BY
filename1) AS g
ON data.filename1=g.filename1
AND data.hd=g.hd
ORDER BY g.hd ASC
您的查询无法正常工作的原因:您依赖于MySQL GROUP BY
extension。此扩展允许将非分组列与分组条件混合,但服务器可以自由选择任何行。这就是为什么不能保证会选择所需的filename2
的原因。事实上,您的原始查询在普通SQL中是有效的,它的MySQL功能 - 但我强烈建议您不要依赖它。