查询 select 不同顺序的问题
Trouble with query select distinct order by case
在问题的帮助下,我学会了如何将 SELECT DISTINCT
与 ORDER BY
一起使用:
How to use DISTINCT and ORDER BY in same SELECT statement?
我从这个问题中学会了使用 ORDER BY CASE
:
How do I return rows with a specific value first?
但是我有一个很难写的查询:
我有一个 table CUSTOMER
列 NAME
,我想得到所有 distinct 客户的名字,我想找到名字'Hamza'先.
SELECT DISTINCT "CUSTOMER"."NAME",
Max("CUSTOMER"."NAME")
FROM "CUSTOMER"
WHERE
"CUSTOMER".id >= 2
GROUP BY "CUSTOMER"."NAME"
ORDER BY CASE WHEN ("CUSTOMER"."NAME" = 'HAMZA' ) THEN 1 ELSE 2 END
错误:
ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 15: ORDER BY CASE WHEN ("CUSTOMER"."NAME" = 'HAMZA' ) THEN 1 EL...
_________________.^
SQL state: 42P10
Character: 372
编辑
已解决:
SELECT "CUSTOMER"."NAME", -- distinct keyword removed here
Max("CUSTOMER"."NAME")
FROM "CUSTOMER"
WHERE
"CUSTOMER".id >= 2
GROUP BY "CUSTOMER"."NAME"
ORDER BY
CASE WHEN ("CUSTOMER"."NAME" = 'HAMZA' ) THEN 1 ELSE 2 END,
CASE WHEN ("CUSTOMER"."NAME" = 'GIORNO' ) THEN 1 ELSE 2 END
分组将确保您获得不同的客户名称。只需删除此修饰符,您应该没问题:
SELECT "CUSTOMER"."NAME", -- distinct keyword removed here
Max("CUSTOMER"."NAME")
FROM "CUSTOMER"
WHERE
"CUSTOMER".id >= 2
GROUP BY "CUSTOMER"."NAME"
ORDER BY CASE WHEN ("CUSTOMER"."NAME" = 'HAMZA' ) THEN 1 ELSE 2 END
I want to get all the distinct names of the customers, and I want to find name 'Hamza' first.
为什么不这样做呢?
SELECT "CUSTOMER"."NAME"
FROM "CUSTOMER"
GROUP BY "CUSTOMER"."NAME"
ORDER BY ("CUSTOMER"."NAME" = 'Hamza') DESC
将SELECT DISTINCT
与聚合函数一起使用通常只会混淆查询逻辑。
我也不知道你为什么选择两次这个名字。
在问题的帮助下,我学会了如何将 SELECT DISTINCT
与 ORDER BY
一起使用:
How to use DISTINCT and ORDER BY in same SELECT statement?
我从这个问题中学会了使用 ORDER BY CASE
:
How do I return rows with a specific value first?
但是我有一个很难写的查询:
我有一个 table CUSTOMER
列 NAME
,我想得到所有 distinct 客户的名字,我想找到名字'Hamza'先.
SELECT DISTINCT "CUSTOMER"."NAME",
Max("CUSTOMER"."NAME")
FROM "CUSTOMER"
WHERE
"CUSTOMER".id >= 2
GROUP BY "CUSTOMER"."NAME"
ORDER BY CASE WHEN ("CUSTOMER"."NAME" = 'HAMZA' ) THEN 1 ELSE 2 END
错误:
ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 15: ORDER BY CASE WHEN ("CUSTOMER"."NAME" = 'HAMZA' ) THEN 1 EL...
_________________.^
SQL state: 42P10
Character: 372
编辑
已解决:
SELECT "CUSTOMER"."NAME", -- distinct keyword removed here
Max("CUSTOMER"."NAME")
FROM "CUSTOMER"
WHERE
"CUSTOMER".id >= 2
GROUP BY "CUSTOMER"."NAME"
ORDER BY
CASE WHEN ("CUSTOMER"."NAME" = 'HAMZA' ) THEN 1 ELSE 2 END,
CASE WHEN ("CUSTOMER"."NAME" = 'GIORNO' ) THEN 1 ELSE 2 END
分组将确保您获得不同的客户名称。只需删除此修饰符,您应该没问题:
SELECT "CUSTOMER"."NAME", -- distinct keyword removed here
Max("CUSTOMER"."NAME")
FROM "CUSTOMER"
WHERE
"CUSTOMER".id >= 2
GROUP BY "CUSTOMER"."NAME"
ORDER BY CASE WHEN ("CUSTOMER"."NAME" = 'HAMZA' ) THEN 1 ELSE 2 END
I want to get all the distinct names of the customers, and I want to find name 'Hamza' first.
为什么不这样做呢?
SELECT "CUSTOMER"."NAME"
FROM "CUSTOMER"
GROUP BY "CUSTOMER"."NAME"
ORDER BY ("CUSTOMER"."NAME" = 'Hamza') DESC
将SELECT DISTINCT
与聚合函数一起使用通常只会混淆查询逻辑。
我也不知道你为什么选择两次这个名字。