所以我得到了任务,即使在谷歌的帮助下,我仍然无法解决一些问题。也许有人可以提出一些解决方案(是否必须使用 JOINS 来完成?等等)。
这是数据库:
CREATE TABLE Foto (
ID int PRIMARY KEY,
FileName varchar(100),
FileSize int,
Created int
) DEFAULT CHARSET=utf8;
CREATE TABLE Users (
LoginName varchar(10) PRIMARY KEY,
Surname varchar(20),
Name varchar(20),
Created date,
LastLoginDate date
) DEFAULT CHARSET=utf8;
CREATE TABLE Scoring (
ID int,
LoginName varchar(10),
Score int,
ScoreDate date,
FOREIGN KEY (LoginName) REFERENCES Users(LoginName),
FOREIGN KEY (ID) REFERENCES Foto(ID),
PRIMARY KEY(ID, LoginName)
) DEFAULT CHARSET=utf8;
“照片”(照片)和用户表应该很清楚。“评分”表适用于对照片进行评分的用户。每个用户只能对每张照片进行一次评分。任务是:
编写查询,返回所有 AVG 分数高于 9 的照片的照片 ID、文件名和 AVG(Score),并创建可提高此查询性能的索引。
编写将返回“LoginName”、“Name”、“Surname”和用户对他为特定用户(例如,名为“John”的用户)评分的照片给出的 AVG 分数的查询。创建可以提高此查询性能的索引。
我正在使用 MySQL 5.5.16,我对第一个查询的想法是这样的:
SELECT F.ID, F.FileName, AVG(SC.Score)
FROM Foto F, scoring SC
WHERE F.ID = SC.ID
AND AVG(SC.Score) > 9
GROUP BY SC.ID;
它返回“#1111 - 组函数的无效使用”,我从来没有真正喜欢聚合函数:D
总的来说,我意识到我很擅长 SQL,我想训练更多地编写查询,但是我在互联网上找到的大多数教程都有非常简单的示例,对解决这些问题没有多大帮助。也许你们中的一些人可以向我建议一个资源,该资源将具有更复杂、准备好的数据库和任务(如果我遇到困难,也有答案)来编写查询?