我正在尝试执行以下操作。我有这张表x
:
id | rssi | Loc
160 | -83 |51
160 | -61 |51
161 | -80 |51
163 | -81 |51
161 | -88 |52
161 | -82 |53
我希望得到Loc
中每个{id}的最大平均值。换句话说,我希望按Loc
,id
分组,然后从中获取每个Loc
的最大id
及其Loc
。
结果将是这样的:
id | maxAvg | Loc
160 | -72 | 51
163 | -81 | 52
161 | -82 | 53
到目前为止我已经尝试过了:
SELECT loc, id, avg(rssi) as w FROM x
group by loc, id
第一部分是对每个loc和id进行rssi分组的平均值,但后来这里我有点迷失了:
选择Loc,id,Max(t.w)
FROM(SELECT t.Loc,t.id,avg(rssi)as w
来自x group by Loc,id)t
t.Loc组 顺序由t.Loc asc;
我不知道这是不是正确的做法。任何帮助都非常受欢迎。 感谢。
解决:
SELECT t.loc, t.id, t.w
FROM (SELECT loc, id, avg(rssi) as w
FROM p
group by loc, id order by loc, w desc)
group by t.loc;
答案 0 :(得分:1)
这很棘手!!让我们一起来看看。你可以跟随in this example。
你正朝着你需要的方向前进。困难的部分是引入与您已计算的平均值相匹配的id
。
所以我做的第一件事就是订购结果,以便最低的平均值显示为每组的第一行:
SELECT loc, id, avg(rssi) as w
FROM p
group by loc, id order by loc, w desc;
从那里我做了一个快速计数器来对每一行进行排名,并且仅提取rank
= 1
SET @loc = NULL, @currvalue = NULL;
select id, w,
@currcount := IF(@loc = loc, @currcount + 1, 1) AS rank,
@loc := loc AS loc from
(SELECT loc, id, avg(rssi) as w
FROM p
group by loc, id order by loc, w desc) r
having rank = 1
;
这可以为您提供所需的结果