Sql Postgres未正确排序两列
我正在从Postgres中选择名称、操作和计数,按名称ASC排序,操作ASC如下: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
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的文档,这个答案也会起作用。谢谢