MySQL复杂的查询语句

时间:2015-03-12 17:33:58

标签: java mysql jdbc

我有以下表格:

地区:

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

我正在尝试为Java jdbc for MySQL db中的类似问题编写一个准备好的语句。

1 个答案:

答案 0 :(得分:1)

你去......

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]

  • 你的结构方式 - 你必须通过字符串值(国家名称)加入 - 这不是一个好的解决方案。想想改变它

相关问题