DISTINCT 在 MYSQL 和 POSTGRESQL 中的工作方式不同
DISTINCT work differntly in MYSQL & POSTGRESQL
我在 SQL 中创建了一个示例 table 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)。
ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select
list Position: 48
您的查询不符合标准 SQL。仅当您禁用选项 ONLY_FULL_GROUP_BY
时,它才适用于 MySQL。
问题是每个branch_id
可能有多个date
:应该用哪一个来排序?
您可以使用汇总并明确说明您的要求。假设您想在每个 branch_id
:
的 latest 日期之前订购
select branch_id from report group by branch_id order by max(date) desc
我在 SQL 中创建了一个示例 table 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)。
ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list Position: 48
您的查询不符合标准 SQL。仅当您禁用选项 ONLY_FULL_GROUP_BY
时,它才适用于 MySQL。
问题是每个branch_id
可能有多个date
:应该用哪一个来排序?
您可以使用汇总并明确说明您的要求。假设您想在每个 branch_id
:
select branch_id from report group by branch_id order by max(date) desc