СУММА SQL с СОЕДИНЕНИЯМИ - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь сделать запрос, который показывает все детали фильма и общее количество проданных билетов на этот фильм.
Вот мой стол:
https://imgur.com/Tgu3XrA

Вот мой код:

SELECT Movies.MovieID, Title, Released, Runtime, Classification, 
SUM(Tickets.SessionID)
FROM Movies 
LEFT JOIN Sessions ON Movies.MovieID = Movies.MovieID 
LEFT JOIN Tickets ON Movies.MovieID = Tickets.SessionID
GROUP BY Movies.MovieID 
ORDER BY Released

Вот результат: https://imgur.com/a/mRKYjNG

Вот схема базы данных;

BEGIN TRANSACTION;
DROP TABLE IF EXISTS "Movies";
CREATE TABLE 'Movies' ('MovieID' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 'Title' TEXT,'Released' INTEGER, 'Runtime' INTEGER,'Classification' TEXT, 'Plot' TEXT);
DROP TABLE IF EXISTS "Tickets";
CREATE TABLE 'Tickets' ('TicketID' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 'SessionID' INTEGER,'PricePaid' REAL,'TimeStamp' INTEGER);
DROP TABLE IF EXISTS "MemberTickets";
CREATE TABLE 'MemberTickets' ('TicketID' INTEGER PRIMARY KEY NOT NULL,'MemberID' INTEGER,'OnlinePurchase' INTEGER);
DROP TABLE IF EXISTS "MovieGenre";
CREATE TABLE 'MovieGenre' ('MovieID' INTEGER NOT NULL, 'Genre' TEXT NOT NULL, PRIMARY KEY ('MovieID', 'Genre'));
DROP TABLE IF EXISTS "Sessions";
CREATE TABLE 'Sessions' ('SessionID' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 'MovieID' INTEGER,'SessionTime' INTEGER, 'NormalPrice' REAL, 'SeatsAvailable' INTEGER, 'RoomID' INTEGER);
DROP TABLE IF EXISTS "Members";
CREATE TABLE 'Members' ('MemberID' INTEGER primary key autoincrement ,FirstName TEXT, LastName TEXT, Postcode TEXT );
COMMIT;

1 Ответ

0 голосов
/ 13 мая 2018

Вы ищете COUNT(), и ваше второе JOIN условие неверно.

SELECT m.MovieID, m.Title, m.Released, m.Runtime, m.Classification, 
       COUNT(t.SessionID)
FROM Movies m LEFT JOIN
     Sessions s
     ON s.MovieID = m.MovieID LEFT JOIN
     Tickets t
     ON t.SessionID = m.SessionID
GROUP BY m.MovieID, m.Title, m.Released, m.Runtime, m.Classification 
ORDER BY m.Released;

Обратите внимание, что GROUP BY включает в себя все неагрегированные столбцы в SQL.

Обратите внимание, что я также включил псевдонимы таблиц и уточнил все имена столбцов. Вы должны всегда указывать все имена столбцов, если запрос имеет более одной ссылки на таблицу. Псевдонимы таблиц делают это проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...