Mysql 从3个不同的表中确定每个用户的总成本
我正在MySql(我的第一个SQL项目)中开发一个剧院预订系统。我有三张桌子:Mysql 从3个不同的表中确定每个用户的总成本,mysql,sql,qsqlquery,Mysql,Sql,Qsqlquery,我正在MySql(我的第一个SQL项目)中开发一个剧院预订系统。我有三张桌子: Production (contains Title, BasicTicketPrice), Performance (PerformanceDate, PerformanceTime, Title) Booking (Email of person who booked, PerformanceDate, PerformanceTime, RowNumber). 每个人都预订了两到三场演出的门票(通过电子邮
Production (contains Title, BasicTicketPrice),
Performance (PerformanceDate, PerformanceTime, Title)
Booking (Email of person who booked, PerformanceDate, PerformanceTime, RowNumber).
每个人都预订了两到三场演出的门票(通过电子邮件预订)
我需要写一个查询,它将显示所有预订座位的价格,我需要输出行数,预订者的电子邮件和计算出的价格
我知道我需要连接这些表,并使查询显示一个名为computed Price的临时列,但我不知道如何计算价格
我试过这个:
SELECT DISTINCT b.RowNumber, b.Email, pr.BasicTicketPrice
FROM booking b, production pr performance p
WHERE p.Title=b.PerfDate*b.PerfTime*b.RowNumber;
SELECT CONCAT (PerfDate, PerfTime, RowNumber) AS BookingID FROM booking;
SELECT RowNumber, Email, CONCAT(PerfDate, PerfTime, RowNumber) AS BookingID FROM booking;
SELECT RowNumber, Email, CONCAT((CONCAT(PerfDate, PerfTime, RowNumber) AS BookingID
FROM booking)BasicTicketPrice*BookingID);
SELECT RowNumber, Email, CONCAT(PerfDate, PerfTime, RowNumber) AS BookingID INTEGER
FROM booking;
SELECT RowNumber FROM booking
LEFT JOIN (SELECT Title FROM performance WHERE '2017-11-01 19:00:00' Email IS NULL);
但它不起作用
有什么建议吗?如有任何意见,我将不胜感激 假设:
- 每预订一排座位的预订量
是标题
生产的合适主键
是PerformanceDate,PerformanceTime
性能的合适主复合键
group_CONCAT
来划分座位号),以及计算购买的票并乘以票费
SELECT
b.Email, prod.Title, per.PerformanceDate, per.PerformanceTime,
GROUP_CONCAT(RowNumber) AS BookedSeats,
COUNT(RowNumber) * prod.BasicTicketPrice AS TotalCost
FROM Booking b
INNER JOIN Performance per
ON b.PerformanceDate = per.PerformanceDate
AND b.PerformanceTime = per.PerformanceTime
INNER JOIN Production prod
ON per.Title = prod.Title
GROUP BY
b.Email, prod.Title, per.PerformanceDate, per.PerformanceTime, prod.BasicTicketPrice
ORDER BY prod.Title, per.PerformanceDate, per.PerformanceTime;
从技术上讲,我们应该将所有非聚合列包含在组中,因此也会列出prod.BasicTicketPrice
。假设:
- 每预订一排座位的预订量
标题
是生产的合适主键
PerformanceDate,PerformanceTime
是性能的合适主复合键
您将按照上面假定的键将三个表连接在一起。似乎您希望根据订票人将每次演出的订票情况分组——如果是这样,您需要使用一个集合来显示座位号(我使用group_CONCAT
来划分座位号),以及计算购买的票并乘以票费
SELECT
b.Email, prod.Title, per.PerformanceDate, per.PerformanceTime,
GROUP_CONCAT(RowNumber) AS BookedSeats,
COUNT(RowNumber) * prod.BasicTicketPrice AS TotalCost
FROM Booking b
INNER JOIN Performance per
ON b.PerformanceDate = per.PerformanceDate
AND b.PerformanceTime = per.PerformanceTime
INNER JOIN Production prod
ON per.Title = prod.Title
GROUP BY
b.Email, prod.Title, per.PerformanceDate, per.PerformanceTime, prod.BasicTicketPrice
ORDER BY prod.Title, per.PerformanceDate, per.PerformanceTime;
从技术上讲,我们应该在组中包含所有未聚合的列,因此也会列出prod.BasicTicketPrice
。如果一个人预订了3张票,那么Booking
中是否有三行,或者是否有Quantity
列。如果不是,则每个性能的行数是否唯一?如果一个人预订了3张票,则预订中是否有三行,或者您是否有数量列。如果不是,则每个性能的行号是否唯一?但是,我只需要输出行号、电子邮件和总价。如果我在“选择”下的第二行中取出prod.Title、per.PerformanceDate和per.PerformanceTime,并在“分组依据”和“订购依据”下执行相同操作,则它不会编译。我不确定我做错了什么。一个座位每一场演出只有一个价格。除非同一位赞助人在多场演出中保留同一座位,否则您的分组不太可能有用。我以为顾客会为他的朋友预订多个座位。你能详细说明一下吗?你说得对。一切都很有帮助。我现在只是在挣扎,因为我不需要显示演出日期、时间和标题,而只需要显示行号(基本上是座位、订票人的电子邮件和门票的总价。我的错,我应该更加小心。我意识到我做错了什么。现在一切都好了。再次感谢你的帮助。我真的非常感谢。祝你一切顺利!但是,我只需要输出行号、电子邮件和总价。如果我在“选择”下的第二行中取出产品标题“per.PerformanceDate”和“per.PerformanceTime”,并在“分组依据”和“订购依据”下执行相同的操作,它不会编译。我不确定我做错了什么。一个座位的每场演出只有一个价格。除非同一位顾客在多场演出中保留同一座位,否则您的分组是u我希望有用。我假设一位顾客会为他的朋友预订多个座位。你能详细说明一下吗?你是对的。一切都很有帮助。我现在只是在挣扎,因为我不需要显示演出日期、时间和标题,而只需要显示行号(基本上是座位、订票人的电子邮件和门票的总价。我的错,我应该更加小心。我意识到我做错了什么。现在一切都好了。再次感谢你的帮助。我真的很感激。祝你一切顺利!