SQL: Group By 是不匹配的记录
SQL: Group By is mismatching records
我正在尝试获得组内的最高版本。我的查询:
SELECT
rubric_id,
max(version) as version,
group_id
FROM
rubrics
WHERE
client_id = 1
GROUP BY
group_id
数据:
结果:
ID 2 的标题没有 2 的版本,为什么不匹配?我需要做什么来纠正这个问题?
编辑,不重复:
这不是 SQL Select only rows with Max Value on a Column 的副本,后者是 post 我在写这篇文章之前阅读并参考过的。我的问题是而不是如何找到最大值,我的问题是为什么version
没有匹配到正确的ID
编辑:So MySQL allows it, but I don't think it's a good practise to use it.
您正在尝试从聚合查询中查询非聚合数据。你不应该那样做。
A GROUP BY
采用它应该用来组成行组的字段(在你的情况下,你用 GROUP BY
说的是:给我一个不同 group_id
的结果)并根据分组给出结果(聚合数据)。
在这里,您尝试访问非聚合数据(rubric_id
在您的情况下)。由于某种原因,查询不会崩溃并在聚合数据中选择一个 "random" id。
MySQL 让您在 select 中有一个不在您的分组依据中的列而使您感到困惑。要解决此问题,请确保您没有 select 任何不在分组依据中的字段。
与其尝试在一条语句中获取所有内容,不如使用子查询来查找 max_version_id 然后加入它。
SELECT T.*
FROM rubrics T
JOIN
(
SELECT
group_id,
max(version) as max_version
FROM
rubrics
GROUP BY
group_id
) dedupe
on T.group_id = dedupe.group_id
and T.version_id = dedupe.max_version_id
WHERE
T.client_id = 1
我正在尝试获得组内的最高版本。我的查询:
SELECT
rubric_id,
max(version) as version,
group_id
FROM
rubrics
WHERE
client_id = 1
GROUP BY
group_id
数据:
结果:
ID 2 的标题没有 2 的版本,为什么不匹配?我需要做什么来纠正这个问题?
编辑,不重复:
这不是 SQL Select only rows with Max Value on a Column 的副本,后者是 post 我在写这篇文章之前阅读并参考过的。我的问题是而不是如何找到最大值,我的问题是为什么version
没有匹配到正确的ID
编辑:So MySQL allows it, but I don't think it's a good practise to use it.
您正在尝试从聚合查询中查询非聚合数据。你不应该那样做。
A GROUP BY
采用它应该用来组成行组的字段(在你的情况下,你用 GROUP BY
说的是:给我一个不同 group_id
的结果)并根据分组给出结果(聚合数据)。
在这里,您尝试访问非聚合数据(rubric_id
在您的情况下)。由于某种原因,查询不会崩溃并在聚合数据中选择一个 "random" id。
MySQL 让您在 select 中有一个不在您的分组依据中的列而使您感到困惑。要解决此问题,请确保您没有 select 任何不在分组依据中的字段。
与其尝试在一条语句中获取所有内容,不如使用子查询来查找 max_version_id 然后加入它。
SELECT T.*
FROM rubrics T
JOIN
(
SELECT
group_id,
max(version) as max_version
FROM
rubrics
GROUP BY
group_id
) dedupe
on T.group_id = dedupe.group_id
and T.version_id = dedupe.max_version_id
WHERE
T.client_id = 1