Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite Exists关键字:如何查询最高平均值?_Sql_Sqlite_Average_Exists_Highest - Fatal编程技术网

SQLite Exists关键字:如何查询最高平均值?

SQLite Exists关键字:如何查询最高平均值?,sql,sqlite,average,exists,highest,Sql,Sqlite,Average,Exists,Highest,在一个包含两列“mID”和“stars”的SQLite数据库表中,我必须返回“mID”,其中“stars”的平均值最高 具有以下数据: Rating mID stars 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”和“stars”的SQLite数据库表中,我必须返回“mID”,其中“stars”的平均值最高

具有以下数据:

Rating mID stars 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 avg(stars) 101 3.0 103 2.5 104 2.5 106 4.5 107 4.0 108 3.33333333333 我想作为这个查询的结果,我会得到最高的平均星数,它是mID,但我得到的是两个元组‘mID’:106,‘theAvg’:4.5和‘mID’:107,‘theAvg’:4.0,而期望的答案只有一个元组‘mID’:106,‘theAvg’:4.5,因为我们在寻找所有平均星数中的最高平均值

The result of my query(Wrong): mID theAvg 106 4.5 107 4.0 The desired Result: mID theAvg 106 4.5 你认为我错了什么步骤?您有什么建议吗?

您可以按描述平均订购,并添加一个限制条款,如下所示:

select mID, avg(stars) theAvg
from Rating
group by mID
order by theAvg desc limit 1;
我应该给你这个:

sqlite> create table Rating (mID INT, stars INT);
sqlite> 
sqlite> insert into Rating values (101, 2);
sqlite> insert into Rating values (101, 4);
sqlite> insert into Rating values (106, 4);
sqlite> insert into Rating values (103, 2);
sqlite> insert into Rating values (108, 4);
sqlite> insert into Rating values (108, 2);
sqlite> insert into Rating values (101, 3);
sqlite> insert into Rating values (103, 3);
sqlite> insert into Rating values (104, 2);
sqlite> insert into Rating values (108, 4);
sqlite> insert into Rating values (107, 3);
sqlite> insert into Rating values (106, 5);
sqlite> insert into Rating values (107, 5);
sqlite> insert into Rating values (104, 3);
sqlite> 
sqlite> select mID, avg(stars) theAvg
   ...> from Rating
   ...> group by mID
   ...> order by theAvg DESC LIMIT 1;
106|4.5

以这种方式编写文档:

很抱歉,我对SQL等有些陌生,但我发现了一种解决方案,当最高AVGSTAR有一个tie时,或者更具体地说,当tie的数量未知时,该解决方案可以工作,在这种情况下,您无法轻松设置有序输出的限制。就像我说的,我有点疯了,所以有点乱:

select title, avg(stars)
from movie join rating using(mID)
where mID not in (select R1.mID  
from (select avg(stars) theAvg, mID, ratingDate from Rating group by mID) 
as R1
join (select avg(stars) theAvg, mID, ratingDate from Rating group by mID)
as R2 
where R1.theAvg < R2.theAvg)
group by mID;
子查询返回平均星星数小于任何其他电影平均星星数的任何电影的mID,主查询的where语句获取子查询未返回的任何mID。逻辑与你最初的想法非常相似


至于二元组问题:我真的不明白你哪里出了错,但如果我弄明白了,我会告诉你的。

谢谢。你的回答真的很有用。但我仍然不明白为什么我的查询返回两个元组,当我认为逻辑上这样一个“不存在”的查询应该只返回一个元组时……是的,这确实很奇怪;你介意我用简化版的sql查询来提问吗?一点也不介意,你可以继续。。。非常感谢。
sqlite> create table Rating (mID INT, stars INT);
sqlite> 
sqlite> insert into Rating values (101, 2);
sqlite> insert into Rating values (101, 4);
sqlite> insert into Rating values (106, 4);
sqlite> insert into Rating values (103, 2);
sqlite> insert into Rating values (108, 4);
sqlite> insert into Rating values (108, 2);
sqlite> insert into Rating values (101, 3);
sqlite> insert into Rating values (103, 3);
sqlite> insert into Rating values (104, 2);
sqlite> insert into Rating values (108, 4);
sqlite> insert into Rating values (107, 3);
sqlite> insert into Rating values (106, 5);
sqlite> insert into Rating values (107, 5);
sqlite> insert into Rating values (104, 3);
sqlite> 
sqlite> select mID, avg(stars) theAvg
   ...> from Rating
   ...> group by mID
   ...> order by theAvg DESC LIMIT 1;
106|4.5
select title, avg(stars)
from movie join rating using(mID)
where mID not in (select R1.mID  
from (select avg(stars) theAvg, mID, ratingDate from Rating group by mID) 
as R1
join (select avg(stars) theAvg, mID, ratingDate from Rating group by mID)
as R2 
where R1.theAvg < R2.theAvg)
group by mID;