Group By子句不显示相同的行值?

时间:2014-04-11 07:29:31

标签: mysql sql database

我有包含以下列和数据的表

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。我想要相同的文件名,但我无法形成查询。

由于

1 个答案:

答案 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功能 - 但我强烈建议您不要依赖它。