Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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 Postgres未正确排序两列_Sql_Postgresql - Fatal编程技术网

Sql Postgres未正确排序两列

Sql Postgres未正确排序两列,sql,postgresql,Sql,Postgresql,我正在从Postgres中选择名称、操作和计数,按名称ASC排序,操作ASC如下: SELECT u.firstname || ' ' || u.surname AS user, nt.name AS action, cn.count FROM ( SELECT actioned_by_id, note_type_id, COUNT(id) AS count FROM customer_notes WHERE actioned_date IS NOT NU

我正在从Postgres中选择名称、操作和计数,按名称ASC排序,操作ASC如下:

SELECT u.firstname || ' ' || u.surname AS user,
    nt.name AS action,
    cn.count
FROM (
    SELECT actioned_by_id, note_type_id, COUNT(id) AS count
    FROM customer_notes
    WHERE actioned_date IS NOT NULL 
    GROUP BY actioned_by_id, note_type_id
) AS cn
LEFT JOIN note_type AS nt ON cn.note_type_id = nt.id
LEFT JOIN users as u on cn.actioned_by_id = u.id
WHERE cn.actioned_by_id IS NOT NULL 
ORDER BY user, action;
但是,结果表明,它忽略了user子句,只按操作排序

"ADMIN USER" "CALL OUT"   1
"ADMIN USER" "EMAIL"      1
"ADMIN USER" "LETTER"     2
"AA AA"      "MEETING"    1
"ADMIN USER" "PHONECALL"  7
"AA AA"      "PHONECALL"  1
有人知道为什么吗?
如何正确排序?

user
是一个保留字-返回当前用户名

试一试


user
是保留字-返回当前用户名

试一试


尝试使用列的位置进行排序

SELECT u.firstname || ' ' || u.surname AS user,
    nt.name AS action,
    cn.count
FROM (
    SELECT actioned_by_id, note_type_id, COUNT(id) AS count
    FROM customer_notes
    WHERE actioned_date IS NOT NULL 
    GROUP BY actioned_by_id, note_type_id
) AS cn
LEFT JOIN note_type AS nt ON cn.note_type_id = nt.id
LEFT JOIN users as u on cn.actioned_by_id = u.id
WHERE cn.actioned_by_id IS NOT NULL 
ORDER BY 1, 2;

尝试使用列的位置进行排序

SELECT u.firstname || ' ' || u.surname AS user,
    nt.name AS action,
    cn.count
FROM (
    SELECT actioned_by_id, note_type_id, COUNT(id) AS count
    FROM customer_notes
    WHERE actioned_date IS NOT NULL 
    GROUP BY actioned_by_id, note_type_id
) AS cn
LEFT JOIN note_type AS nt ON cn.note_type_id = nt.id
LEFT JOIN users as u on cn.actioned_by_id = u.id
WHERE cn.actioned_by_id IS NOT NULL 
ORDER BY 1, 2;

试试这个订单条款:-

按u.firstname | |‘| | | u.姓氏、行动命令


我认为它忽略了order by column USER,因为这是一个派生列—您需要指定派生本身,而不是派生的名称

试试这个order子句:-

按u.firstname | |‘| | | u.姓氏、行动命令


我认为它忽略了order by column USER,因为这是一个派生列—您需要指定派生本身,而不是派生的名称

就这样。谢谢我改为
为name
,并以此进行排序。@mouckatron在执行
排序时,您不需要将firstname和姓氏连接起来。这就足够了:
按u.firstname、u.names排序
。当我在上看到ORDER BY上的串联时,我会畏缩,它是无用的,并且有副作用,这是供您查找的out@MichaelBuen如果不知道数据的值,就不可能这么说。如果有两条记录('ab','c')和('a','bc'),您的提案将返回不同的结果。为了保留原始查询的意图,连接是必要的。因此,您给出了一个SQL FIDLE,其中结果集证明我是对的,但您仍然看不到区别?@podiluska RE:“证明您是对的”?你甚至看不到通过串联排序会返回错误的结果?扎克伯格应该排在最后。您的查询返回扎克伯格作为第二名。并没有任何SQLFIDLE(串联方法与直接按字段排序)可以证明您是正确的,事实上它表明了另一种情况。你的问题真的不正确,就是这样。谢谢我改为
为name
,并以此进行排序。@mouckatron在执行
排序时,您不需要将firstname和姓氏连接起来。这就足够了:
按u.firstname、u.names排序
。当我在上看到ORDER BY上的串联时,我会畏缩,它是无用的,并且有副作用,这是供您查找的out@MichaelBuen如果不知道数据的值,就不可能这么说。如果有两条记录('ab','c')和('a','bc'),您的提案将返回不同的结果。为了保留原始查询的意图,连接是必要的。因此,您给出了一个SQL FIDLE,其中结果集证明我是对的,但您仍然看不到区别?@podiluska RE:“证明您是对的”?你甚至看不到通过串联排序会返回错误的结果?扎克伯格应该排在最后。您的查询返回扎克伯格作为第二名。并没有任何SQLFIDLE(串联方法与直接按字段排序)可以证明您是正确的,事实上它表明了另一种情况。你的问题并不是很好的答案,既然我已经更彻底地阅读了order by的文档,这个答案也会起作用。谢谢,这是一个很好的答案,既然我已经更彻底地阅读了order by的文档,这个答案也会起作用。谢谢