我有一个像这样的SQL查询:
SELECT DISTINCT(id) FROM users WHERE ...
我希望显示结果:
user=12355
user=78949
user=9898
user=489891
基本上以“user =”为前缀。是否可以使用PostgreSQL执行此操作?我尝试使用STRING_AGG('user=', DISTINCT(id))
,但在DISTINCT(id)
上收到错误。有什么想法吗?
答案 0 :(得分:3)
您应该可以使用||
进行字符串连接:
SELECT DISTINCT('user=' || id)
FROM users
WHERE ...
这也可能有用:
http://www.postgresql.org/docs/current/static/functions-string.html
答案 1 :(得分:3)
我会使用普通的GROUP BY
。
SELECT format('user=%s',id)
FROM users
GROUP BY id;
http://sqlfiddle.com/#!1/39727/3
这比在字符串连接上使用DISTINCT
要高效得多。
答案 2 :(得分:3)
您收到string_agg()
错误消息的唯一原因是您忘记了第二个参数,这是必需的。这个非常简单的查询就可以了:
SELECT string_agg('user=' || id, E'\n')
FROM users
WHERE ...
E'\n'
..换行符
使用您问题中的字符串生成 一行 。
您不需要DISTINCT
或GROUP BY
,除非您在id
中有重复项 - 在这种情况下您需要子查询:
SELECT string_agg('user=' || id, E'\n')
FROM (SELECT id FROM users GROUP BY id) x
答案 3 :(得分:1)
简单地 从用户
中选择concat('user =',id)