【问题标题】:DISTINCT work differntly in MYSQL & POSTGRESQLDISTINCT 在 MYSQL 和 POSTGRESQL 中的工作方式不同
【发布时间】:2020-11-30 17:36:27
【问题描述】:

我在 SQL 中创建了一个示例表report,并使用以下命令在其中填充了示例数据。

create table report(id int primary key,vistor_id int, branch_id int,date int);
insert into report values (1,1,3,27),(2,1,2,27),(3,1,1,28),(4,1,4,30),(5,1,1,30);

我需要找到最近访问过的(基于日期列)分支列表而不重复。 所以我使用了以下查询

select distinct branch_id from report order by date desc;

它适用于 MYSQL,但在 POSTGRESQL 上显示以下错误。如何解决这个问题?或者如何在 POSTGRESQL 中获得相同的结果?(错误来自 sqlfiddle.com)。

错误:对于 SELECT DISTINCT,ORDER BY 表达式必须出现在选择中 列表位置:48

【问题讨论】:

    标签: mysql sql postgresql sql-order-by distinct


    【解决方案1】:

    您的查询不是有效的标准 SQL。仅当您禁用选项ONLY_FULL_GROUP_BY 时,它才能在 MySQL 中使用。

    问题是每个branch_id可能有多个dates:应该使用哪一个来订购?

    您可以使用聚合并明确说明您的要求。假设您想在branch_id最新日期之前订购:

    select branch_id from report group by branch_id order by max(date) desc 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-16
      • 2013-08-25
      • 2014-02-05
      • 2017-09-08
      • 2019-11-11
      • 2013-02-13
      • 1970-01-01
      相关资源
      最近更新 更多