【问题标题】:SQL SUM with JOINS带有 JOINS 的 SQL SUM
【发布时间】:2018-05-13 15:21:22
【问题描述】:

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

【问题讨论】:

  • 请发送minimal reproducible example。 IE。通过显示几行“create table...”和“insert...”来提供定制的玩具数据库。

标签: sql database sqlite join count


【解决方案1】:

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

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

【讨论】:

  • 嗨,戈登,我应该提一下,这是 SQL lite。当我尝试您的查询时出现错误,您能解释一下为什么您还用单个字符替换了我所有的表名吗?
  • @r92l30 。 . .第二个问题很简单:正如答案中所解释的,查询更容易编写和阅读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多