Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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_Postgresql - Fatal编程技术网

SQL-基于另一列对特定列进行排序

SQL-基于另一列对特定列进行排序,sql,postgresql,Sql,Postgresql,我有以下形式的数据,我想根据我必须从用户id数组中找到的特定用户id对用户名列进行排序 usernames | empno | user_ids | ------------------+--------------------- { Akon, Den } | 11 | { 12, 13 } | { John, Nash } | 7 | { 15, 12 } | { Ahmad, Umar }| 9 | { 18, 1

我有以下形式的数据,我想根据我必须从
用户id
数组中找到的特定
用户id
用户名列进行排序

 usernames     | empno    |   user_ids |       
------------------+---------------------
{ Akon, Den }  |    11    | { 12, 13 } |
{ John, Nash } |     7    | { 15, 12 } |
{ Ahmad, Umar }|     9    | { 18, 12 } |
例如,应首先显示
user\u id
=12的用户名。结果如下所示

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

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

好吧,这里最大的问题是您正在使用数组,这实际上使事情变得更加困难。如果您的数据库中确实没有规范化数据,则可以使用将其逐行和数组_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之前,您没有横向查询,也没有带有许多参数的
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
这两种解决方案都假定两个数组中每行的元素数相同


如果代码没有运行,请告诉我(我实际上没有尝试过,因此可能有输入错误或逻辑问题)。

@MuhamamdAwais如果您只对
用户ID的第一个元素进行排序,

尝试以下操作:
按用户id从您的\u表顺序中选择用户名,empno[1]

为什么一个用户id映射到多个用户名?逗号分隔的数据不是SQL方式,这种设计只会给您带来很多麻烦。。。(并使事情变得非常困难。)@jarlh根据我的数据库体系结构,我必须以CSV格式导出一些信息,因为我必须这样做。@vkp根据我的体系结构,我可以将一个用户名映射到多个用户名:)即使业务规则允许每个用户名有多个用户名,您的数据库设计也非常糟糕。搜索数据库规范化。