gpt4 book ai didi

mysql - 在 SQL 中创建修改后的 GROUP 选择

转载 作者:行者123 更新时间:2023-11-29 18:33:50 25 4
gpt4 key购买 nike

我正在尝试为 SQL 做一些非常标准的事情,但我不知道如何谷歌或搜索它,因为我只能解释我想要实现的目标。

如果我有一张 table :

Table X:
ID | PID | TID
1 | 1 | 2
2 | 1 | 3
3 | 2 | 3
4 | 3 | 4
5 | 4 | 1
6 | 2 | 2

我想按PID分组(从整个表中仅获取每个PID一次),但一定要获取指定中的值>TID(因为正常组只会随机选择它们)。那么,如果将 TID 指定为 '2',我希望查询结果是什么:

Result:
ID | PID | TID
1 | 1 | 2
4 | 3 | 4 -- 4 because from all over the table and it does not have TID = 2 where PID = 3
5 | 4 | 1 -- 5 because the same as above
6 | 2 | 2 -- This is where the normal GROUP would mess up as it would give ID = 3 instead of ID = 6

具有 ID23 的值将被跳过,因为它们具有的 PID 也与 TID = 2

谢谢!

最佳答案

总的来说,分组是正确的方式。棘手的部分是获取按指定方式排序的结果,即 tid=2 应该是第一个条目。仅按 tid 排序会首先给出 tid=1 结果。解决方案是使用平方函数 y = (x - m)^2,其中 m 等于您要查找的值,因此 m = 2.

将所有这些打包到一个查询结果中

SELECT 
SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY (POW((tid - 2), 2))), ',', 1 ),
pid,
SUBSTRING_INDEX(GROUP_CONCAT(tid ORDER BY (POW((tid - 2), 2))), ',', 1 )
FROM so1
GROUP BY pid
ORDER BY AVG((POW((tid - 2), 2))) ASC

产生

id  pid tid
1 1 2
6 2 2
5 4 1
4 3 4

关于请求按 id 对结果进行排序的注释,您可以将查询包装在一个简单的 select 语句中:

SELECT x.* 
FROM (
SELECT
SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY (POW((tid - 2), 2))), ',', 1 ) as id,
pid,
SUBSTRING_INDEX(GROUP_CONCAT(tid ORDER BY (POW((tid - 2), 2))), ',', 1 ) as tid
FROM so1
GROUP BY pid
ORDER BY AVG((POW((tid - 2), 2))) ASC
) x
ORDER BY x.id

关于mysql - 在 SQL 中创建修改后的 GROUP 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45478024/

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