2

我的数据库中有两个表,我正在尝试使用一个查询从这两个表中获取特定报告的数据。

表一是“电影”,它有以下字段:

  • 电影_ID
  • 姓名
  • 季节

表二是每部电影的“票房”销售收入:

  • 票房_ID
  • 电影_ID
  • 日期
  • 数量

我想运行一个查询来比较给定季节每部电影的开放周末,并将它们作为一个数据集返回,并将收集的数量加在一起。所以我想拍摄每部电影并获得每部电影的前三天票房并将它们相加,以便我得到这样的查询

  1. 电影A,4910万
  2. 电影B,4220万
  3. 电影C,2950万

请注意,收集的金额只需要输出数字,我会处理格式。我只是无法弄清楚如何只查询每部电影的前三天票房并将它们加在一起。

我知道我可以运行一个查询并获取具有票房的电影,然后遍历该查询并重新查询数据库,但我知道有很多电影并不是最有效的做事方式。我不确定是否有办法在一个查询中完成所有这些(每部电影的前三天加在一起),但我想看看是否有更高级的知识可以帮助我。

4

2 回答 2

1
SELECT  a.Name, SUM(COALESCE(b.Amount,0)) totalAmount
FROM    Movies a
        LEFT JOIN BoxOffice b
            ON a.Movies_ID = b.Movies_ID
WHERE   b.date BETWEEN DATE_ADD(CURDATE(),INTERVAL -3 DAY) AND CURDATE()
GROUP BY a.Name

如果 的值为CURDATE()2012-11-06 (即今天),它将从2012-11-032012-11-06计算。

后续问题,您如何计算日期?白天?按周?要不然是啥?

更新 1

SELECT  a.Name, SUM(COALESCE(b.Amount,0)) totalAmount
FROM    Movies a
        LEFT JOIN BoxOffice b
            ON a.Movies_ID = b.Movies_ID
        LEFT JOIN
        (
            SELECT  movies_ID, MIN(date) minDate
            FROM    BoxOffice
            GROUP BY Movies_ID
        ) c ON a.Movies_ID = c.Movies_ID
WHERE   DATE(b.date) BETWEEN DATE(c.minDate) AND 
                             DATE(DATE_ADD(c.minDate,INTERVAL 3 DAY))
GROUP BY a.Name
于 2012-11-06T00:19:51.987 回答
0

只需加入 Movies_ID 上的表格,并在发行日期和日期之间添加 TIMEDIFF 的 WHERE 为 3 天。

于 2012-11-06T00:20:34.110 回答