MYSQL数据库连接表查询提取有限记录并添加结果

时间:2012-11-06 00:15:45

标签: mysql

我的数据库中有两个表,我试图使用一个Query从两个表中获取特定报告的数据。

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

  • Movies_ID
  • 名称

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

  • Boxoffice_ID
  • Movies_ID
  • 日期
  • 金额

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

  1. 电影A,49.1百万
  2. 电影B,42.2百万
  3. 电影C,2950万
  4. 请注意收集的金额只需输出数字,我会处理格式。我只是弄清楚如何只查询每部电影的前三天票房并将它们加在一起。

    我知道我可以运行一个查询并使用票房获得电影,然后循环播放并重新查询数据库,但我知道很多电影不是最有效的处理方式。我不确定是否有办法在一个查询中完成所有这些(每部电影加在一起的前三天),但我想知道是否有更高级知识的人可以帮助我。

2 个答案:

答案 0 :(得分: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-03 计算到 2012年11月6日

后续问题,你如何计算日期?白天?一周?或者什么?

更新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

答案 1 :(得分:0)

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