在具有“mID”和“stars”两列的 SQLite 数据库表中,我必须返回“mID”的平均值最高的“stars”。
拥有以下数据:
评级 mID 星 101 2 101 4 106 4 103 2 108 4 108 2 101 3 103 3 104 2 108 4 107 3 106 5 107 5 104 3
我会首先通过按“mID”对每个“mID”进行分组来平均“星”,例如
select mID, avg(stars) theAvg
from Rating
group by mID;
结果,我会得到每个“mID”的平均“星”值表。
mID 平均(星) 101 3.0 103 2.5 104 2.5 106 4.5 107 4.0 108 3.33333333333
如果我只返回'stars'的最高平均值,
那么我可以只取select max(theAvg)之类的东西,然后是我刚刚计算的东西。
但是,为了获得与其“mID”相关的最高平均“星星”,我需要其他东西。
因此,我使用了“不存在”关键字,后跟一个子查询,该子查询生成另一个“mID”和“stars”表。此子查询与原始表进行比较,以验证对于原始表 R1 中的某些平均“星”值,不存在大于 R1 的平均“星”值的新表 R2 的平均“星”值
select mID, theAvg
from (select mID, avg(stars) theAvg
from Rating
group by mID) as R1
where not exists(select * from
(select mID, avg(stars) theAvg
from Rating
group by mID) as R2
where R2.theAvg > R1.theAvg);
我认为作为这个查询的结果,我会得到最高的平均星数,它是 mID,但我得到的是两个元组 ('mID':106, 'theAvg':4.5) 和 ('mID':107, ' theAvg':4.0),当期望的答案只有一个元组 ('mID':106, 'theAvg':4.5),因为我们正在寻找所有“stars”平均值的最高平均值。
我的查询结果(错误): mID theAvg 106 4.5 107 4.0 期望的结果: mID theAvg 106 4.5
你认为我做错了什么步骤?有什么建议你会怎么做吗?