Mysql 按值1分组,然后选择组中值2最高的行

Mysql 按值1分组,然后选择组中值2最高的行,mysql,sql,group-by,sql-order-by,greatest-n-per-group,Mysql,Sql,Group By,Sql Order By,Greatest N Per Group,我在MySQL 5.7数据库中有一个名为values的下表: 价值1 价值2 价值3 福 7. 有些事 福 5. 有些事 福 12 随便什么 酒吧 3. 什么 酒吧 18 随便什么 酒吧 0 随便什么 巴兹 99 随便什么 巴兹 100 什么 你不想分组。你想要过滤!您正在保留原始行 一种方法使用相关子查询: select v.* from values v where v.value2 = (select max(v2.value2) from values

我在
MySQL 5.7
数据库中有一个名为
values
的下表:

价值1 价值2 价值3 福 7. 有些事 福 5. 有些事 福 12 随便什么 酒吧 3. 什么 酒吧 18 随便什么 酒吧 0 随便什么 巴兹 99 随便什么 巴兹 100 什么 你不想分组。你想要过滤!您正在保留原始行

一种方法使用相关子查询:

select v.*
from values v
where v.value2 = (select max(v2.value2)
                  from values v2
                  where v2.value1 = v.value1
                 );
你不想分组。你想要过滤!您正在保留原始行

一种方法使用相关子查询:

select v.*
from values v
where v.value2 = (select max(v2.value2)
                  from values v2
                  where v2.value1 = v.value1
                 );

架构和插入语句:

 create table mytable (value1 varchar(50),  value2   int, value3 varchar(50));

 insert into mytable values('foo',  7,  'something4');
 insert into mytable values('foo',  5,  'something1');
 insert into mytable values('foo',  12, 'anything3');
 insert into mytable values('bar',  3,  'something7');
 insert into mytable values('bar',  18, 'anything5');
 insert into mytable values('bar',  12, 'anything8');
 insert into mytable values('baz',  99, 'anything9');
 insert into mytable values('baz',  100,    'something0');
查询#1(使用内部联接)

输出:

价值1 价值2 价值3 福 12 随便什么 酒吧 18 随便什么 巴兹 100 什么
架构和插入语句:

 create table mytable (value1 varchar(50),  value2   int, value3 varchar(50));

 insert into mytable values('foo',  7,  'something4');
 insert into mytable values('foo',  5,  'something1');
 insert into mytable values('foo',  12, 'anything3');
 insert into mytable values('bar',  3,  'something7');
 insert into mytable values('bar',  18, 'anything5');
 insert into mytable values('bar',  12, 'anything8');
 insert into mytable values('baz',  99, 'anything9');
 insert into mytable values('baz',  100,    'something0');
查询#1(使用内部联接)

输出:

价值1 价值2 价值3 福 12 随便什么 酒吧 18 随便什么 巴兹 100 什么
来自t t2的
是打字错误吗?@David。但是我看到你在问题中包含了一个表名,所以我在回答中使用了它。请注意,
values
对于表名来说是一个糟糕的选择,因为它是一个SQL关键字(想想
insert
)。但是我看到你在问题中包含了一个表名,所以我在回答中使用了它。请注意,
values
对于表名来说是一个糟糕的选择,因为它是一个SQL关键字(想想
insert
)。