繁体   English   中英

查询遇到麻烦,请根据情况选择不同的顺序

[英]Trouble with query select distinct order by case

我已经了解了如何在问题的帮助下将SELECT DISTINCTORDER BY结合使用:
如何在同一个SELECT语句中使用DISTINCT和ORDER BY?

我从这个问题中学到了使用ORDER BY CASE
如何首先返回具有特定值的行?

但是我有一个很难写的查询:

我有一个带有列NAME的表CUSTOMER ,我想获取所有不同的客户名称,并且我想首先找到名称“ 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


错误

错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中
第15行:按情况排序(“ CUSTOMER”。“ NAME” ='HAMZA')THEN 1 EL ...
_________________。^
SQL状态:42P10
角色: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

我想获得所有不同的客户名称,并且我想首先找到名称“ Hamza”。

为什么不这样做呢?

SELECT "CUSTOMER"."NAME"
FROM "CUSTOMER" 
GROUP BY "CUSTOMER"."NAME" 
ORDER BY ("CUSTOMER"."NAME"  = 'Hamza') DESC

SELECT DISTINCT与聚合函数一起使用通常只会混淆查询逻辑。

我也不知道为什么您要两次选择名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM