それで私はタスクを手に入れましたが、Googleの助けを借りてもまだ解決できていないタスクがいくつかあります. 誰かがいくつかの解決策を提案できるかもしれません (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;
"Foto"(写真) と Users テーブルはかなり明確なはずです。表「採点」は、写真を評価するユーザー用です。各ユーザーは、各写真を 1 回だけ評価できます。タスクは次のとおりでした。
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 が苦手で、クエリをもっと書くためのトレーニングをしたいと思っていますが、インターネットで見つけたほとんどのチュートリアルには、これらの問題を解決するのにあまり役に立たない非常に単純な例があります。クエリを作成するための、もう少し複雑で準備が整ったデータベースとタスク (行き詰まった場合の回答もある) を備えたリソースを提案してくれる人がいるかもしれません。