gpt4 book ai didi

SQL - 根据另一列对特定列进行排序

转载 作者:行者123 更新时间:2023-11-29 13:22:31 25 4
gpt4 key购买 nike

我有以下形式的数据,我想根据我必须从 user_ids 数组中找到的特定 user_idusernames 列进行排序.

 usernames     | empno    |   user_ids |       
------------------+---------------------
{ Akon, Den } | 11 | { 12, 13 } |
{ John, Nash } | 7 | { 15, 12 } |
{ Ahmad, Umar }| 9 | { 18, 12 } |

例如,user_id = 12 的用户名应该首先显示。结果如下所示

 usernames     | empno    |       
------------------+--------
{ Akon, Den } | 11 |
{ Nash, John } | 7 |
{ Umar, Ahmad }| 9 |

我相信在 Postgres 中会有一些最简单的方法来做到这一点。这种结构只是一个例子。

最佳答案

嗯,这里最大的问题是您正在使用数组,这实际上让事情变得更加困难。如果你的数据库中确实没有规范化的数据,你可以使用unnest function使其逐行和 array_agg 返回数组。如果您使用的是 9.4+,则很容易:

SELECT
t.empno,
array_agg(u.username ORDER BY u.user_id) AS username_agg,
array_agg(u.user_id ORDER BY u.user_id) AS user_id_agg
FROM
your_table t,
unnest(t.usernames, t.user_ids) AS u(username, user_id)
GROUP BY
t.empno
ORDER BY
user_ids_agg

在 9.4 之前,您没有 LATERAL 查询,也没有带有许多参数的 unnest,因此会有点困难:

SELECT
t.empno,
array_agg(t.username ORDER BY t.user_id) AS username_agg,
array_agg(t.user_id ORDER BY t.user_id) AS user_id_agg
FROM
(
SELECT
t1.empno,
unnest(t1.usernames) AS username,
unnest(t1.user_ids) AS user_id
FROM
your_table t1
) t
GROUP BY
t.empno
ORDER BY
user_ids_agg

这两种解决方案都假设您在两个数组中的每一行都具有相同数量的元素。

如果代码没有运行,请告诉我(我还没有真正尝试过,所以可能存在拼写错误或逻辑问题)。

关于SQL - 根据另一列对特定列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39206764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com