按名称分组,仅显示第一条记录
Group By name by showing only the first records
谁能告诉我如何将分组依据仅用于 3 列?
这是我的 table(sample1)
|vendorid | storeid | yearid | earnamount |Name |
|---------|---------|--------|-------------|-----|
|1 | 2 | 2007 | 100 | A |
|1 | 2 | 2007 | 150 | C |
|1 | 3 | 2007 | 100 | E |
|2 | 2 | 2008 | 500 | F |
|2 | 2 | 2007 | 200 | H |
|2 | 2 | 2008 | 500 | J |
|3 | 1 | 2007 | 100 | L |
|4 | 4 | 2008 | 230 | N |
我希望我的结果是这样的:
显示结果,名称列仅显示记录中的第一个
|vendorid | storeid | yearid | sum(earnamount) | Name |
|---------|---------|--------|-----------------|------|
|1 | 2 | 2007 | 250 | A |
|1 | 3 | 2007 | 100 | E |
|2 | 2 | 2008 | 1000 | F |
|2 | 2 | 2007 | 200 | H |
|3 | 1 | 2007 | 100 | L |
|4 | 4 | 2008 | 230 | N |
这是我的 sql 命令:
select vendorid, storeid, yearid, sum(earnamount), name
from sample1
group by vendorid,storeid, yearid
不确定下一步是什么。
如果 select 块确实有 GROUP BY 子句,则 SELECT 子句中指定的任何列规范必须专门作为聚合函数的参数或在给定的列列表中出现GROUP BY 子句,或两者兼而有之。
所以在 GROUP BY
中删除名称或添加名称列
select vendorid, storeid, yearid, sum(earnamount)
from sample1
group by vendorid,storeid, yearid
或者
select vendorid, storeid, yearid, sum(earnamount), name
from sample1
group by vendorid,storeid, yearid,name
没有“第一个”记录,除非列定义了顺序。为了做你想做的事,你需要 name
上的聚合函数。例如:
select vendorid, storeid, yearid, sum(earnamount),
min(name) as name
from sample1
group by vendorid, storeid, yearid;
如果您想要与最小或最大 earnamount
关联的名称(例如),您可以使用条件聚合:
select vendorid, storeid, yearid, sum(earnamount),
first_name
from (select s1.*,
first_value(name) over (partition by vendorid, storeid, yearid order by earnamount desc) as first_name
from sample1 s1
) s1
group by vendorid, storeid, yearid, first_name;
谁能告诉我如何将分组依据仅用于 3 列? 这是我的 table(sample1)
|vendorid | storeid | yearid | earnamount |Name |
|---------|---------|--------|-------------|-----|
|1 | 2 | 2007 | 100 | A |
|1 | 2 | 2007 | 150 | C |
|1 | 3 | 2007 | 100 | E |
|2 | 2 | 2008 | 500 | F |
|2 | 2 | 2007 | 200 | H |
|2 | 2 | 2008 | 500 | J |
|3 | 1 | 2007 | 100 | L |
|4 | 4 | 2008 | 230 | N |
我希望我的结果是这样的: 显示结果,名称列仅显示记录中的第一个
|vendorid | storeid | yearid | sum(earnamount) | Name |
|---------|---------|--------|-----------------|------|
|1 | 2 | 2007 | 250 | A |
|1 | 3 | 2007 | 100 | E |
|2 | 2 | 2008 | 1000 | F |
|2 | 2 | 2007 | 200 | H |
|3 | 1 | 2007 | 100 | L |
|4 | 4 | 2008 | 230 | N |
这是我的 sql 命令:
select vendorid, storeid, yearid, sum(earnamount), name
from sample1
group by vendorid,storeid, yearid
不确定下一步是什么。
如果 select 块确实有 GROUP BY 子句,则 SELECT 子句中指定的任何列规范必须专门作为聚合函数的参数或在给定的列列表中出现GROUP BY 子句,或两者兼而有之。 所以在 GROUP BY
中删除名称或添加名称列select vendorid, storeid, yearid, sum(earnamount)
from sample1
group by vendorid,storeid, yearid
或者
select vendorid, storeid, yearid, sum(earnamount), name
from sample1
group by vendorid,storeid, yearid,name
没有“第一个”记录,除非列定义了顺序。为了做你想做的事,你需要 name
上的聚合函数。例如:
select vendorid, storeid, yearid, sum(earnamount),
min(name) as name
from sample1
group by vendorid, storeid, yearid;
如果您想要与最小或最大 earnamount
关联的名称(例如),您可以使用条件聚合:
select vendorid, storeid, yearid, sum(earnamount),
first_name
from (select s1.*,
first_value(name) over (partition by vendorid, storeid, yearid order by earnamount desc) as first_name
from sample1 s1
) s1
group by vendorid, storeid, yearid, first_name;