从表和分组依据中获得最大值,其中列的逗号分隔值具有不同的顺序或具有更多的值

问题描述 投票:0回答:1

我有一个这样的表以及数据

CREATE TABLE temp (
  `name` varchar(20),
  `ids` varchar(20),
  `value1` int,
   `value2` int
);

INSERT INTO temp(`name`,`ids`, `value`) values
  ('A', '1,2', 10, 11),
  ('A', '2,1', 12, 100),
   ('A', '1,2,3', 20, 1),
     ('B', '6', 30, 10)

我需要通过'Name'获得最大值

我正在使用以下查询来获取最大值。

select name, ids, max(value) as value 
from temp
group by name,ids
database sybase sybase-ase
1个回答
0
投票

该问题被标记为Sybase ASE,但是'create table和'insert'命令在ASE中无效,因此不确定是由于标签错误还是'create table'和'insert'命令错误而引起的。 ..因此,假设这是针对Sybase ASE数据库的:

我假设所需的输出是显示value = max(value)的那些行。

首先,我们将设置测试用例:

create table mytab
(name  varchar(20)
,ids   varchar(20)
,value int)
go

insert into mytab (name,ids,value) values ('A', '1,2'  , 10)
insert into mytab (name,ids,value) values ('A', '2,1'  , 12)
insert into mytab (name,ids,value) values ('A', '1,2,3', 20)
insert into mytab (name,ids,value) values ('B', '6'    , 30)
go

这里是一种可能的解决方案:

select t.name, t.ids, t.value
from   mytab t
join   (select name,max(value) as maxvalue from mytab group by name) dt
on     t.name  = dt.name
and    t.value = dt.maxvalue
order by t.name
go

 name                 ids                  value
 -------------------- -------------------- -----------
 A                    1,2,3                         20
 B                    6                             30

子查询/派生表为我们提供了每个唯一max(value)name。然后,主查询将这些name/max(value)对联接回主表,以向我们提供所需的行(即,其中value = max(value))。

在ASE 15.7 SP138上测试。

© www.soinside.com 2019 - 2024. All rights reserved.