postgresql 如何将这些帐户串在一起?

gkn4icbw  于 2023-01-30  发布在  PostgreSQL
关注(0)|答案(2)|浏览(93)

我有张table和这个差不多
| 身份证|帐目|
| - ------|- ------|
| 小行星1111|小行星333 - 333|
| 小行星1111|小行星333 - 333|
| 二二二二二二|小行星444 - 444|
| 二二二二二二|小行星555 - 555|
| 二二二二二二|小行星555 - 555|
我试着把所有的东西聚集起来看起来像这样
| 身份证|帐目|
| - ------|- ------|
| 小行星1111|333 - 333 - 1、-2|
| 二二二二二二|电话:444 - 444 - 1、555 - 555 - 1、-2|
到目前为止我只知道这个

SELECT 
id, 
CONCAT((STRING_AGG(DISTINCT SUBSTRING(account FROM '^(([^-]*-){2})'), ', ')), 
       (STRING_AGG(DISTINCT SUBSTRING(account FROM '[^-]*$'), ', '))) account
GROUP BY id

但这产生了
| 身份证|帐目|
| - ------|- ------|
| 小行星1111|第333 - 333段第1、2段|
| 二二二二二二|第444 - 444段、第555 - 555段|

gwbalxhn

gwbalxhn1#

, A AS (
SELECT id,
                SUBSTRING(account FROM '^(([^-]*-){2})') first_account,
                STRING_AGG(DISTINCT SUBSTRING(account FROM '[^-]*$'), ', ') second_account
FROM table         
GROUP BY id, first_account
)
select id, STRING_AGG(DISTINCT first_account || second_account, ', ')
FROM A
GROUP BY id

我最终弄明白了,这对我很有效:))

nxagd54h

nxagd54h2#

我建议采取不同的做法:首先将账号拆分为主、后缀,然后分别进行分组操作:

SELECT
  id,
  string_agg(accounts, ', ') AS account
FROM (
  SELECT
    id,
    concat(account_main, string_agg(account_suffix, ', ')) AS accounts
  FROM (
    SELECT
      id,
      substr(account, 1, 7) AS account_main,
      substr(account, 8, 9) AS account_suffix
    FROM
      example
  ) AS t1
  GROUP BY
    id,
    account_main
) AS t2
GROUP BY
  id;

相关问题