我有下表:
地区:
Country | Region
Canada | North America
Mexico | North America
Germany | Europe
电影:
ID | MovieName | ReleaseDate
1001 | Star Trek | 2015-01-01
1002 | Star Wars | 2014-06-01
浏览次数:
ID | Country | Views
1001 | Canada | 50
1001 | Mexico | 45
1001 | Germany | 125
1002 | Canada | 21
1002 | Germany | 75
我要查找的查询结果是这样的:
MovieName | North America | Europe | Total Views |WeeksSinceRelease
Star Trek | 95 | 125 | 220 |10
Star Wars | 21 | 75 | 96 |40
我正在尝试为 MySQL db 中的 Java jdbc 中的类似问题编写准备好的语句。
最佳答案
给你...
SELECT Movies.MovieName,
MAX(IF(Gr.Region='North America', Gr.rViews, 0)) AS `North America`,
MAX(IF(Gr.Region='Europe', Gr.rViews, 0)) AS `Europe`,
SUM(Gr.rViews) AS `Total Views`,
CEIL(DATEDIFF(NOW(), Movies.ReleaseDate)/7) AS weeks
FROM Movies
JOIN
(SELECT m.ID, r.Region, SUM(v.Views) AS rViews
FROM Movies m
JOIN Views v ON m.ID=v.ID
JOIN Regions r ON v.Country=r.Country
GROUP BY m.ID, r.Region) Gr ON Movies.ID=Gr.ID
GROUP BY Movies.ID
注释:
如果您添加更多区域 - 您将需要在以下位置创建更多
MAX(IF(Gr.Region=[RegionName], Gr.rViews, 0)) AS [RegionName]
输出您的构造方式 - 您必须通过字符串值(国家/地区名称)连接 - 这不是一个好的解决方案。想办法改变一下
关于java - MySQL复杂查询语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29016543/