def*_*ode 16 mysql sql group-by aggregate
您不能(不应该)将非聚合放在查询SELECT行中GROUP BY.
但是,我想访问与max相关联的非聚合之一.用简单的英语,我想要一张每种类型最老的表格.
CREATE TABLE stuff (
id int,
kind int,
age int
);
Run Code Online (Sandbox Code Playgroud)
这个查询给了我以后的信息:
SELECT kind, MAX(age)
FROM stuff
GROUP BY kind;
Run Code Online (Sandbox Code Playgroud)
但它不是最有用的形式.我真的希望id与每一行相关联,以便我可以在以后的查询中使用它.
我正在寻找这样的东西:
SELECT id, kind, MAX(age)
FROM stuff
GROUP BY kind;
Run Code Online (Sandbox Code Playgroud)
这输出:
SELECT stuff.*
FROM
stuff,
( SELECT kind, MAX(age)
FROM stuff
GROUP BY kind) maxes
WHERE
stuff.kind = maxes.kind AND
stuff.age = maxes.age
Run Code Online (Sandbox Code Playgroud)
看起来真的应该离开以获取这些信息而无需加入.我只需要SQL引擎在计算最大值时记住其他列.
您不能(不应该)将非聚合放在GROUP BY查询的SELECT行中.
您可以并且必须定义要为聚合函数分组的内容以返回正确的结果.
MySQL(和SQLite)以他们的无限智慧决定他们会违反规范,并允许查询接受GROUP BY子句缺少SELECT中引用的列 - 它有效地使这些查询不可移植.
看起来真的应该离开以获取这些信息而无需加入.
如果无法访问MySQL不支持的分析/排名/窗口函数,则自联接到派生表/内联视图是获得所需结果的最便携方式.
| 归档时间: |
|
| 查看次数: |
25440 次 |
| 最近记录: |