A games tábla a következő mezőket tartalmazza:
| app_id |
|---|
| title |
| date_release |
| win |
| mac |
| linux |
| rating |
| positive_ratio |
| user_reviews |
| price_final |
| price_original |
| discount |
| steam_deck |
A users tábla a következő mezőket tartalmazza:
| user_id |
|---|
| products |
| reviews |
A recommendations tábla a következő mezőket tartalmazza:
| app_id |
|---|
| helpful |
| funny |
| date_submitted |
| is_recommended |
| hours |
| user_id |
| review_id |
Hozzátok létre egy adatbázist steam_recommendations néven, majd a forrásfájlok elemzését követően az adatok tárolására megfelelő adattáblákat games, users és recommendations néven. Az elsődleges kulcsokat is állítsátok be. Az idegen kulcsokat most még ne állítsátok be.
A logikai értékek tárolására ENUM(’false’,’true’) adattípust használjatok.
CREATE DATABASE steam_recommendations
CHARACTER SET utf8
COLLATE utf8_general_ci;
CREATE TABLE games(
app_id int NOT NULL,
title varchar(255),
date_release date,
win ENUM('false','true'),
mac ENUM('false','true'),
linux ENUM('false','true'),
rating varchar(255),
positive_ratio int,
user_reviews int,
price_final double,
price_original double,
discount double,
steam_deck ENUM('false','true'),
PRIMARY KEY (app_id)
)
CHARACTER SET utf8
COLLATE utf8_general_ci;
LOAD DATA LOCAL INFILE 'D:/games.csv' INTO TABLE steam_recommendations.games FIELDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\\n' IGNORE 1 LINES;
CREATE TABLE users(
user_id int NOT NULL,
products int,
reviews int,
PRIMARY KEY (user_id)
)
CHARACTER SET utf8
COLLATE utf8_general_ci;
LOAD DATA LOCAL INFILE 'D:/users.csv' INTO TABLE steam_recommendations.users FIELDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\\n' IGNORE 1 LINES;
CREATE TABLE recommendations(
app_id int,
helpful int,
funny int,
date_submitted date,
is_recommended ENUM('false','true'),
hours double,
user_id int,
review_id int NOT NULL,
PRIMARY KEY (review_id)
)
CHARACTER SET utf8
COLLATE utf8_general_ci;
LOAD DATA LOCAL INFILE 'D:/recommendations.csv' INTO TABLE steam_recommendations.recommendations FIELDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\\n' IGNORE 1 LINES;
ALTER TABLE recommendations
ADD FOREIGN KEY (app_id) REFERENCES games(app_id),
ADD FOREIGN KEY (user_id) REFERENCES users(user_id);
ALTER TABLE recommendations ADD FOREIGN KEY (app_id) REFERENCES games(app_id);
ALTER TABLE recommendations ADD FOREIGN KEY (user_id) REFERENCES users(user_id);
mysqldump -u root -p adatbázisneve táblaneve > sqlfájlelérésiútja
mysqldump -u root -p steam_recommendations users > C:/Users/csapo.gabor/Downloads/users.sql
mysqldump -u root -p steam_recommendations recommendations > C:/Users/csapo.gabor/Downloads/recommendations.sql
Oldjátok meg a következő feladatokat. Futtassátok le a lekérdezéseket PHPMyAdmin-ban és parancssorban is. Mit tapasztaltok a futási időket tekintve?
Írassuk ki az adatbázisban tárolt összes játék nevét ABC sorrendbe rendezve.
SELECT title FROM games
ORDER BY title;
Átlagosan mennyi játékkal rendelkeznek a felhasználók? Jelenítsük meg az értéket average_products mezőnévvel.
SELECT AVG(products) AS average_products FROM users;
Melyik értékelést nyilvánították a leginkább hasznosnak (helpful) a felhasználók? Kérdezzük le az értékelés id-ját, annak a felhasználónak az azonosítóját aki írta azt, illetve a hasznosnak ítélt szavazatok számát.
SELECT user_id, review_id, helpful FROM recommendations
WHERE helpful = (SELECT MAX(helpful) FROM recommendations);
Az egyes játékokra összesen mennyi értékelés érkezett? Jelenítsük meg a játékok nevét és a kapott értékelések számát review_count aliassal. A megoldáshoz a games tábla user_reviews mezője nem használható.
SELECT games.title, COUNT(recommendations.review_id) AS review_count FROM games
INNER JOIN recommendations ON games.app_id = recommendations.app_id
GROUP BY games.title;