max语句的子查询或group by之间的区别

时间:2017-11-22 09:53:25

标签: mysql sql

我想知道这两个状态之间的区别。

分组声明:

SELECT 
   a,
   max(b)
from table
group by a;

子查询声明:

SELECT 
   a,
   b
from table as t1
where b=(SELECT MAX(b) from table as t2 where t1.a=t2.a);

这两个陈述的目标是显示单amax(b)

3 个答案:

答案 0 :(得分:0)

无论行如何,第一种方法都会为您提供b的最大值。就像你有3列abc并使用第一种方法a将是分组标准,对于b,您将得到最大值但是怎么样c你会得到它的价值取决于mysql,它不会给你b的值最大的行

a  b  c
1  3  2 
1  2  4
1  1  6

使用第二种方法时,它会为您提供b的值最大的行,考虑到上面的数据集,您将得到1,3,2。

换句话说,第一个会给每个ba的最大值,第二个方法会给每个a组的最大行

答案 1 :(得分:0)

第一部分max()中的

返回每组中b的最大值。

在第二部分中,您只需搜索max b并获取相应的行

答案 2 :(得分:0)

这里我们看看两者的结果:

首先,您需要创建一个表来测试这些:

create table #table1
(
a int,
--region nvarchar(1),
b int
)

insert into #table1 values(1,2);
insert into #table1 values(3,4);
insert into #table1 values(5,2);
insert into #table1 values(4,7);
insert into #table1 values(7,3);

然后运行两个查询,您将获得附加图像的结果。 enter image description here

如果您需要更多帮助,请告诉我