gpt4 book ai didi

MySQL 如何通过 MAX(id) 选择 smth....WHERE userID = 某个数字 GROUP BY smth

转载 作者:行者123 更新时间:2023-11-29 18:31:32 27 4
gpt4 key购买 nike

我的数据库中有下一个表:

个人奖品

 ___________ ___________ _________ __________
| id | userId | specId| grp |
|___________|___________|_________|__________|
| 1 | 1 | 1 | 1 |
| 2 | 1 | 2 | 1 |
| 3 | 2 | 3 | 1 |
| 4 | 2 | 4 | 2 |
| 5 | 1 | 5 | 2 |
| 6 | 1 | 6 | 2 |
| 7 | 2 | 7 | 3 |
| 8 | 1 | 13 | 4 |
|___________|___________|_________|__________|

我需要按 max id group by grp 选择specId。所以我编写了下一个查询

SELECT pp.specId 
FROM personal_prizes pp
WHERE pp.specId IN (SELECT MAX(pp1.id)
FROM personal_prizes pp1
WHERE pp1.userId = 1
GROUP BY pp1.grp)

这对我的小 table 有用。但是当我尝试为我的产品数据库实现它时,personal_prizes > 100,000。请帮我优化一下

最佳答案

您的查询应该可以正常工作。确保您不仅在 id 上有一个索引(我认为这是主键),而且在 specId 上也有一个索引。

作为替代方案,您可以尝试这个:

select    group_concat(pp.specId order by pp1.id desc)+0 as result_specId
from personal_prizes pp1
left join personal_prizes pp on pp.specId = pp1.id
where pp1.userId = 1
group by pp1.grp
having result_specId is not null;

这里的想法是将子查询提升为主查询,并通过外连接检索 specIdgroup_concat 聚合函数会将感兴趣的函数列为第一个。 having 子句将排除未找到匹配 specId 的情况。

请注意,只有在 specId 字段保证为非空的情况下,这才会给出相同的结果。

关于MySQL 如何通过 MAX(id) 选择 smth....WHERE userID = 某个数字 GROUP BY smth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45650542/

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