gpt4 book ai didi

mysql - 在 MySQL 中两次使用 GROUP BY

转载 作者:IT王子 更新时间:2023-10-28 23:43:58 29 4
gpt4 key购买 nike

我的 table 看起来像这样。

Location    Head    Id  IntTime
1 AMD 1 1
2 INTC 3 3
3 AMD 2 2
4 INTC 4 4
5 AMD2 1 0
6 ARMH 5 1
7 ARMH 5 0
8 ARMH 6 1
9 AAPL 7 0
10 AAPL 7 1

位置是主键。我需要按 Head 和 Id 进行 GROUP BY,当我使用 GROUP BY 时,我需要保留具有最小 IntTime 的行。

在第一个 GROUP BY Id 之后,我应该得到(我保留最小的 IntTime)

Location    Head    Id  IntTime
2 INTC 3 3
3 AMD 2 2
4 INTC 4 4
5 AMD2 1 0
7 ARMH 5 0
8 ARMH 6 1
9 AAPL 7 0

经过第二个GROUP BY Head,我应该得到(我保持最小的IntTime)

Location    Head    Id  IntTime
2 INTC 3 3
3 AMD 2 2
5 AMD2 1 0
7 ARMH 5 0
9 AAPL 7 0

当我运行以下命令时,我保留了最小的 IntTime 但行没有保留。

SELECT Location, Head, Id, MIN(IntTime) FROM test 
GROUP BY Id

此外,为了运行第二个 GROUP BY,我保存了这个表并再次执行

SELECT Location, Head, Id, MIN(IntTime) FROM test2 
GROUP BY Head

有没有办法结合这两个命令?

[编辑:澄清]结果不应包含两个具有相同值的 Head 或两个具有相同值的 Id。删除那些重复项时,应保留具有最小 IntTime 的行。

最佳答案

此查询返回您要查找的确切最终结果 (example):

SELECT `final`.*
FROM `tableName` AS `final`
JOIN (
SELECT `thead`.`Id`, `Head`, MIN(`intTime`) AS `min_intTime`
FROM `tableName` AS `thead`
JOIN (
SELECT `Id`, MIN(intTime) as min_intTime
FROM `tableName` AS `tid`
GROUP BY `Id`
) `tid`
ON `tid`.`Id` = `thead`.`Id`
AND `tid`.`min_intTime` = `thead`.`intTime`
GROUP BY `Head`
) `thead`
ON `thead`.`Head` = `final`.`Head`
AND `thead`.`min_intTime` = `final`.`intTime`
AND `thead`.`Id` = `final`.`Id`

工作原理

最内层查询按Id分组,返回Id和对应的MIN(intTime)。然后,中间查询按Head分组,返回Head和对应的IdMIN(intTime)。最终查询在缩小范围后返回所有行。您可以将最终(最外层)查询视为对仅包含所需行的表的查询,这样您就可以进行额外的比较(例如,WHERE final.intTime > 3)。

关于mysql - 在 MySQL 中两次使用 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145511/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com