Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 通过仅显示第一条记录按名称分组_Sql_Snowflake Cloud Data Platform_Snowflake Schema - Fatal编程技术网

Sql 通过仅显示第一条记录按名称分组

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 |

有谁能告诉我如何使用GROUPBY只对3列进行排序? 这是我的桌子(样本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;