Sql 如何获取GROUP_BY子句中的值列表?
如果我在表格中有这样的数据Sql 如何获取GROUP_BY子句中的值列表?,sql,group-by,sybase,Sql,Group By,Sybase,如果我在表格中有这样的数据 id data -- ---- 1 1 1 2 1 3 2 4 2 5 3 6 3 4 如何在查询中获得这样的结果(在sybase server上) 在普通的SQL中,不能在直接的分组中执行此操作。您必须使用游标(或类似构造)手动连接每个组中的值 Oracle允许您定义一个自定义聚合器,该聚合器将在PL/SQL中执行此连接 SQL Server允许您在.NET中定义一个自定义聚合器,该聚合器也可以这样做 不过,我不
id data
-- ----
1 1
1 2
1 3
2 4
2 5
3 6
3 4
如何在查询中获得这样的结果(在sybase server上)
在普通的SQL中,不能在直接的分组中执行此操作。您必须使用游标(或类似构造)手动连接每个组中的值
- Oracle允许您定义一个自定义聚合器,该聚合器将在PL/SQL中执行此连接李>
- SQL Server允许您在.NET中定义一个自定义聚合器,该聚合器也可以这样做李>
- 不过,我不确定Sybase有哪些定义自定义聚合器的选项
SELECT id,
LIST(data)
FROM table
GROUP BY id
在MsSQL中,您可以使用函数(不知道SyBase中是否有类似的功能) 然后:
SELECT ID, dbo.GetDataForID(ID) as Data
FROM Table
GROUP BY ID
我知道在MySQL中有,而在Sybase中,我认为这正如另一个答案所述:
SELECT id, LIST(data||', ')
FROM yourtable
GROUP BY id
试试这个:
SELECT id,
GROUP_CONCAT(data)
FROM table
GROUP BY id
对于PostgreSQL,使用类似的函数
在PL/SQL中,可以通过以下方式实现:
SELECT id, LISTAGG(data, ',') WITHIN GROUP(ORDER BY 0) "data"
FROM yourtable
GROUP BY id
在mysql中,使用
SELECT id, GROUP_CONCAT(data)
FROM yourtable
GROUP BY id
或者使用自定义分隔符:
SELECT id, GROUP_CONCAT(data SEPARATOR ', ')
FROM yourtable
GROUP BY id
请参见SQL Server中的。:
select distinct b.id, data=STUFF((select ',' +convert(varchar,id)
from yourtable a
where a.id=b.id
for xml path ('')),1,1,'')
from yourtable b
对于Presto,使用
对于SQL server:
SELECT id, STRING_AGG(data, ',')
FROM your_table
GROUP BY id;
对于SparkSQL(例如,查询AWS Athena时):
选择id,数组连接(数组聚合(数据),',')
从你的桌子上
按id分组;
Sybase允许您在C/C++中定义用户定义的聚合函数。SQL Server 2008 R2(10.50.2500)似乎不支持它(“LIST”不是可识别的内置函数名。”)这是针对MySql的,而不是问题中指定的Sybase。对于HiveQL,请参阅。我认为OP将其标记为Sybase SQL问题谢谢,我在presto sql中需要这个,但不知道mysql的group_concat name的等效名称。group_concat上的链接已移动:
SELECT id, GROUP_CONCAT(data SEPARATOR ', ')
FROM yourtable
GROUP BY id
select distinct b.id, data=STUFF((select ',' +convert(varchar,id)
from yourtable a
where a.id=b.id
for xml path ('')),1,1,'')
from yourtable b
SELECT id, array_agg(data)
FROM yourtable
GROUP BY id
SELECT id, STRING_AGG(data, ',')
FROM your_table
GROUP BY id;