mysql - 在mysql中分组,其他列的值较低
问题描述
如果 tval 具有重复/重复值,则需要按组的id
和组的group
最大值和最小值进行分组。tval
感谢你的帮助。
ID | 时间 | 团体 | tval |
---|---|---|---|
3 | 0 | 一种 | 1.184 |
3 | 0.5 | 一种 | 2.173 |
3 | 1 | 一种 | 1.065 |
3 | 3 | 一种 | 1.143 |
3 | 6 | 一种 | 3.222 |
3 | 9 | 一种 | 1.851 |
3 | 12 | 一种 | 3.222 |
4 | 0 | 一种 | 1.184 |
4 | 0.5 | 一种 | 2.173 |
4 | 1 | 一种 | 1.065 |
4 | 3 | 一种 | 1.143 |
4 | 0.7 | 一种 | 2.322 |
4 | 9 | 一种 | 1.851 |
4 | 12 | 一种 | 1.345 |
预期产出
ID | 团体 | 时间 | tval |
---|---|---|---|
3 | 一种 | 6 | 3.222 |
4 | 一种 | 0.7 | 2.322 |
下面是创建和插入查询,供有兴趣尝试的人使用。
CREATE TABLE sample (id INT, timel DOUBLE, group VARCHAR(50), tval DOUBLE);
INSERT INTO sample VALUES
(3,0,'a',1.184),
(3,0.5,'a',2.173),
(3,1,'a',1.065),
(3,3,'a',1.143),
(3,6,'a',3.222),
(3,9,'a',1.851),
(3,12,'a',3.222),
(4,0,'a',1.184),
(4,0.5,'a',2.173),
(4,1,'a',1.065),
(4,3,'a',1.143),
(4,0.7,'a',2.322),
(4,9,'a',1.851),
(4,12,'a',1.345);
解决方案
用于NOT EXISTS
过滤表,以便您仅tval
获取每个组合的最大行id
,group
然后聚合以获取最小值timel
:
SELECT s1.id, s1.trt, MIN(timel) timel, s1.tval
FROM sample s1
WHERE NOT EXISTS (
SELECT 1
FROM sample s2
WHERE s2.id = s1.id AND s2.trt = s1.trt AND s2.tval > s1.tval
)
GROUP BY s1.id, s1.trt, s1.tval
如果您的 MySql 版本是 8.0+,您可以使用ROW_NUMBER()
窗口函数:
SELECT id, trt, timel, tval
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY id, trt ORDER BY tval DESC, timel) rn
FROM sample
) t
WHERE rn = 1
请参阅演示。
推荐阅读
- jenkins - 运行 Jenkins 管道时如何修复“脚本返回退出代码 1”
- hive - 新的 HiveConf 异常 NoClassDefFoundError:com/ctc/wstx/io/InputBootstrapper
- python - 使用python3在Windows中创建文件的快捷方式(.lnk)
- elixir - 在挂载期间使用 LiveView 将值从客户端传递到 Phoenix 服务器
- mongodb - 如何在 Windows 上更改 mongodb 数据目录
- c# - C# 获取 ClassName:异常 TargetSite.DeclaringType.Name 与 MethodBase.GetCurrentMethod().DeclaryingType
- alpine - xxd 在 alpine linux 上没有做任何事情
- ruby-on-rails - SAML IDP 实施以支持单个 IDP 中的多个 SP
- python - 无论如何要截取整个控制台窗口的屏幕截图吗?
- python - 在R中制作时间序列数据框