sql - 我如何在 PostgreSQL 中执行 DISTINCT 和 ORDER BY?

标签 sql mysql database postgresql

PostgreSQL 快让我打小动物了。我正在为 MySQL 执行以下 SQL 语句以获取唯一的城市/州/国家列表。

SELECT DISTINCT city
              , state
              , country 
           FROM events 
          WHERE (city > '') 
            AND (number_id = 123)  
       ORDER BY occured_at ASC

但是这样做会使 PostgreSQL 抛出这个错误:

PGError: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list

但是,如果我将 occured_at 添加到 SELECT,那么返回唯一列表就会失败。

使用 MySQL 和第一次查询的结果:

BEDFORD PARK       IL   US
ADDISON         IL  US
HOUSTON         TX  US

如果我将 occured_at 添加到 SELECT 中,结果:

BEDFORD PARK       IL   US  2009-11-02 19:10:00
BEDFORD PARK       IL   US  2009-11-02 21:40:00
ADDISON         IL  US  2009-11-02 22:37:00
ADDISON         IL  US  2009-11-03 00:22:00
ADDISON         IL  US  2009-11-03 01:35:00
HOUSTON         TX  US  2009-11-03 01:36:00

第一组结果是我最终尝试使用 PostgreSQL 获得的结果。

最佳答案

那么,您希望 Postgres 如何确定在创建排序顺序时使用哪个 occured_at 值?

我不是特别了解 Postgres 语法,但你可以试试:

SELECT DISTINCT city, state, country, MAX(occured_at)
       FROM events 
      WHERE (city > '') AND (number_id = 123) ORDER BY MAX(occured_at) ASC

SELECT city, state, country, MAX(occured_at)
       FROM events 
      WHERE (city > '') AND (number_id = 123) 
      GROUP BY city, state, country ORDER BY MAX(occured_at) ASC

假设您希望结果按最近发生的事件排序。如果您想要第一次出现,请将 MAX 更改为 MIN。

顺便说一下,您的标题询问的是 GROUP BY,但您的语法指定的是 DISTINCT。

关于sql - 我如何在 PostgreSQL 中执行 DISTINCT 和 ORDER BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1670476/

相关文章:

sql - BigQuery 标准 SQL 查询返回错误答案

sql - "NOT EXISTS"是不好的 SQL 实践吗?

sql - 序列生成的主键似乎不能很好地与 select 语句配合使用

mysql - 使用 txt 文件加载数据 INFILE

sql - 使用 INNER JOIN 获取 DISTINCT 记录

database - Postgres服务不断重启

sql - PostgreSQL Where 计数条件

php - cakephp 中的 FIND_IN_SET 不工作

php - 良好的错误标记 | PHP

sql - MySQL 代码无法显示类别名称(WordPress 数据库)