MySQL 中 SELECT DISTINCT ON 语句的转换


<!–

–>

MySQL 中 SELECT DISTINCT ON 语句的转换

阅读更多:

简介

在 PostgreSQL 中,可以通过 SELECT DISTINCT ON 语句在查询结果中去重特定列。然而,在 中并没有类似的语法。

本文将介绍如何将 Postgres 中的 SELECT DISTINCT ON 语句转换为 中的等价语句。

(adsbygoogle = window.adsbygoogle || []).push({});

SELECT DISTINCT ON

在 PostgreSQL 中,SELECT DISTINCT ON 语句可以帮助我们在查询结果中去重特定列。例如:

SELECT DISTINCT ON (column1) column1, column2, column3
FROM table
ORDER BY column1, column4 DESC;

上述语句将会返回一个由 column1、column2 和 column3 组成的结果集,其中 column1 列的值不重复,并且按照 column1 递增排序,如果有相同的 column1 列的值,则根据 column4 递减排序。

转换为 MySQL 中的等价语句

虽然 MySQL 中没有 SELECT DISTINCT ON 语句,但是我们可以使用 GROUP BY 语句来实现相同的效果。例如:

SELECT
    t1.column1,
    t1.column2,
    t1.column3
FROM
    table t1
JOIN (
    SELECT column1, MAX(column4) column4
    FROM table
    GROUP BY column1
) t2 ON t1.column1 = t2.column1 AND t1.column4 = t2.column4;

上述语句将会返回一个由 column1、column2 和 column3 组成的结果集,其中 column1 列的值不重复,并且按照 column1 递增排序,如果有相同的 column1 列的值,则根据 column4 递减排序。

在这个例子中,我们使用了一个子查询来得到每个 column1 列的最大 column4 值。然后我们加入了一个 JOIN 子句,将原始查询结果与子查询结果进行了连接,仅保留了由每个 column1 列及其对应的最大 column4 值所组成的记录。

总结

在 MySQL 中,我们可以使用 GROUP BY 语句来实现与 PostgreSQL 中 SELECT DISTINCT ON 语句相同的效果。对于更复杂的查询,可能需要更多的 技巧和调整来实现相同的效果。

(adsbygoogle = window.adsbygoogle || []).push({});