SQL中的多分组逐行提取

SQL中的多分组逐行提取,sql,group-by,Sql,Group By,让我先告诉您我的示例数据结构 CREATE TABLE foobar ( id int primary key, lastname varchar(100) not null, firstname varchar(100) not null, val1 int not null, val2 int not null ) 想象一下这样的示例条目: 1, Smith, Bob, 1, 3 2, Smith, Bob 2, 1 3, SMith, Allen , 3, 4 i、

让我先告诉您我的示例数据结构

CREATE TABLE foobar (
  id int primary key,
  lastname varchar(100) not null,
  firstname varchar(100) not null,
  val1 int not null,
  val2 int not null
)
想象一下这样的示例条目:

1, Smith, Bob, 1, 3
2, Smith, Bob 2, 1
3, SMith, Allen , 3, 4
i、 e.名字和姓氏在这里不区分

现在查看查询:

select     lastname, firstname, avg(val1), avg(val2)
from       foobar
where      lastname = 'Smith'
group by   firstname
样本输出:

1, Smith, Bob, 1.5 , 2
2, Smith, Allen , 3, 4
现在我想要三种不同的东西

1. get me all smith where avg(val1) is the biggest value of all
2. get me all smith where avg(val1) is the lowest value of all
样本:

1.  1.5 is smallest value therefore get me  Bob
2.   3 is the biggest value therefore get me Allen
我不知道如何有效地做到这一点。 我的方法是保存平均值的最小值和最大值,然后根据该值加入到同一个表中。但我觉得这是个糟糕的解决方案


有什么有效的方法吗?

我不知道你说的最大价值是什么。根据定义,平均值永远不会是最大值,而是所有值的中位数

如果要返回表中最大和最小的条目,请使用以下方法:

select     lastname, firstname, max(val1), val2
from       foobar
where      lastname = 'Smith'
group by   firstname

select     lastname, firstname, min(val1), val2
from       foobar
where      lastname = 'Smith'
group by   firstname

第三件事是什么?而SQL?的任何特殊特性都可以忽略。到目前为止,我只想知道所有史密斯的名字。从我的表中选择不同的名字,其中lastname='smith';好的,我的意思是:我想知道所有史密斯的名字,他们的avgval1是所有史密斯的最小值,你在使用哪个DBMS?博士后?神谕