java - MySQL复杂查询语句

标签 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

我正在尝试为 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/

相关文章:

java - 如果读取字母而不是数字,如何设置语句?

java - 非继承对象的通用代码

mysql - Rails/MySQL - 具有尺寸和价格的产品

php - .htaccess 未知语法错误

hibernate - 如何使用 Postgres 和 Tomcat7 JDBC 池配置 PreparedStatement 缓存?

java - 在 java 中使用 printf 换行? %n 正确吗?

mysql - 在同一个表上进行联接的慢聚合查询

java - 从 Java 运行 Oracle 查询

java - 想从数据库中检索 java 中 xml 标记的值

java - 无法使用 VS 2012 Express 安装 CUDA?