首页 > 解决方案 > 带有 JOINS 的 SQL SUM

问题描述

我正在尝试进行查询以显示所有电影详细信息以及该电影售出的总票数。
这是我的桌子:
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;

标签: sqldatabasesqlitejoincount

解决方案


您正在寻找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 中的所有未聚合列。

请注意,我还包括了表别名并限定了所有列名。当查询具有多个表引用时,您应该始终限定所有列名。表别名使这更容易。


推荐阅读