我有两个问题:
SELECT id, max(index) from table;
和
SELECT id, index from table where index=(select max(index) from table);
两者之间有什么区别吗?
我在MySQL Query Browser中运行代码,发现结果是一样的。但我觉得应该有所不同。如果有差异,介意附加一个简单的场景?
修改:index
不唯一。
编辑:您可能会说我的第一个查询丢失了group by
;但它实际上是在mysql中工作。我只是想知道两者之间的差异,而不是第一次查询与group by
和第二次查询之间的差异。
答案 0 :(得分:1)
第一个应返回所有表记录,每个表记录具有相同的max(index)
值。
id_1 100
id_2 100
id_3 100
等
第二个应该只返回一个具有最大index
值的记录(假设您的index
字段在此表中是唯一的)。如果不是,那么结果可能确实相同。
id_3 100
ADDED:对于[index]不唯一的情况:
答案 1 :(得分:0)
我不是MySQL专家(见上文)。但是,我对this的读取是,如果最大索引是唯一的,那么两个查询都将返回相同的唯一ID和索引。但是,如果最大索引显示多行,则第一个查询将返回最大索引和一个不确定ID。第二个查询将返回与max index一样多的行,每个id出现在一行中。
编辑:在阅读了APC的答案后,删除了部分答案,并意识到我写的不正确。答案 2 :(得分:0)
像Ruffles一样,我不是MySQL的专家,所以当没有明确的GROUP BY
使用聚合函数时,我不理解它的行为。 NewInTown的例子在我看来很奇怪。
但我绝对希望在第一个查询中使用GROUP BY
来生成与第二个查询不同的结果集。当然它确实在甲骨文中。
SQL> select pk, max(idx)
2 from whatever
3 group by pk
4 /
PK MAX(IDX)
---------- ----------
1 10
2 50
3 100
SQL> select pk, idx
2 from whatever
3 where idx in ( select max(idx) from whatever)
4 /
PK IDX
---------- ----------
3 100
SQL>
结果相同的唯一时间是所有记录共享IDX
的相同值:
SQL> select pk, max(idx)
2 from whatever
3 group by pk
4 /
PK MAX(IDX)
---------- ----------
1 100
2 100
3 100
SQL> select pk, idx
2 from whatever
3 where idx in ( select max(idx) from whatever)
4 /
PK IDX
---------- ----------
1 100
2 100
3 100
SQL>
答案 3 :(得分:0)
SELECT id, max(index) from table;
正如已经指出的那样,使用这个组功能意味着你必须按id分组。如果您错过了select中的id,则您的语句将从索引列返回最大值 整个桌子。如果您包含组,则结果将是每个ID的行和每个ID的最大索引。
您的第二个问题:
SELECT id, index from table where index=(select max(index) from table);
子查询将从整个表中选择最大索引,然后外部查询将在与最大值具有相同索引的任何行上返回id和index。
在您的情况下,结果可能相同,但查询非常不同。