Sql 通过仅显示第一条记录按名称分组
有谁能告诉我如何使用GROUPBY只对3列进行排序? 这是我的桌子(样本1) 我希望我的结果是这样的: 显示结果,名称列仅显示记录中的第一个Sql 通过仅显示第一条记录按名称分组,sql,snowflake-cloud-data-platform,snowflake-schema,Sql,Snowflake Cloud Data Platform,Snowflake Schema,有谁能告诉我如何使用GROUPBY只对3列进行排序? 这是我的桌子(样本1) 我希望我的结果是这样的: 显示结果,名称列仅显示记录中的第一个 |vendorid | storeid | yearid | sum(earnamount) | Name | |---------|---------|--------|-----------------|------| |1 | 2 | 2007 | 250 | A | |1 |
|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子句中给定的列列表中出现,或同时出现在两者中。 因此,请按删除组中的“名称”或“添加名称”列
select vendorid, storeid, yearid, sum(earnamount)
from sample1
group by vendorid,storeid, yearid
或
没有“第一”记录,除非列定义了顺序。要执行所需操作,需要在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;
按vendorid、storeid、yearid、sum(earnamount)、MAX(name)从样本1组中选择vendorid、storeid、yearid作为名称。您使用的数据库是什么?对于某些数据库,解决方案选项可能会有所不同。在对其进行分组时,我需要该名称仅显示表中的第一个,而不考虑其值。
select vendorid, storeid, yearid, sum(earnamount),
min(name) as name
from sample1
group by vendorid, storeid, yearid;
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;