sql - 查询有问题选择不同的顺序

标签 sql postgresql select distinct

在问题的帮助下,我学会了如何将 SELECT DISTINCTORDER 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?

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

我有一个表 CUSTOMER,其中有一列 NAME,我想获取客户的所有 distinct 名称,我想找到名称 '首先是哈姆扎。

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

关于sql - 查询有问题选择不同的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57003139/

相关文章:

sql - 根据表值找出哪个模式

angular - Angular Dart -选择对象作为模型(不是字符串)

mysql - 获取百分比平均值

mysql - 选择数据库行值是否与一组字符串匹配的有效方法

mysql - 错误 : ER_WRONG_VALUE_COUNT_ON_ROW: Column count doesn't match value count at row 1

postgresql - 在 Postgresql 中创建常量

ruby-on-rails - 按字母顺序排列并按首字母分组

sql - rails - 我不应该在 rails 迁移中使用默认值吗

javascript - 是否有由 HTML + css + javascript 支持的 sql 编辑器?

postgresql - 杂散换行破坏转储/恢复时的源代码