在MySQL中比较来自同一表和列的两组数据,而不调用表两次

在MySQL中比较来自同一表和列的两组数据,而不调用表两次,mysql,sql,Mysql,Sql,我正在努力使我的查询更有效,因为它仍然很重,而且在将来它会变得最糟糕 我的问题是: SELECT SUM(fb_diff.shares) shares FROM ( SELECT (SUM(fb.shares) - SUM(fbs.shares)) shares FROM ( SELECT post_id, shares FROM wp_facebook_total_stats WHERE date = '2014-08-01 00

我正在努力使我的查询更有效,因为它仍然很重,而且在将来它会变得最糟糕

我的问题是:

SELECT SUM(fb_diff.shares) shares
FROM (
    SELECT (SUM(fb.shares) - SUM(fbs.shares)) shares
    FROM (
        SELECT post_id, shares
        FROM wp_facebook_total_stats
        WHERE date = '2014-08-01 00:00:00'
        GROUP BY post_id
    ) fbs
    LEFT JOIN wp_facebook_total_stats fb ON fb.post_id = fbs.post_id
    WHERE fb.date = '2014-09-28'
) fb_diff
它是有效的。。。我得到数据。。。但是,有没有一种方法可以在不重复使用同一张桌子的情况下达到同样的效果呢

因为当我解释的时候,我明白了:

2    DERIVED     fb                        ALL      post_id    NULL       NULL   NULL   588849    Using where
3    DERIVED     wp_facebook_total_stats   index    post_id    post_id    8      NULL   588849    Using where

如果您试图获得基于不同日期或时间间隔的post共享之间的差异,并且不想递归地加入到同一个表中,我可以看到至少两个选项:

  • 创建一个提前执行此操作并可以缓存的视图,然后查询该视图
  • 通过将select语句更改为group on date和post_id,然后在代码中进行数学运算以显示共享差异,将数据拉入代码中的数组
  • 如果可能的话,修改您的模式以更好地满足您的需要。例如,在wp_facebook_total_统计数据中添加一列,显示股票与前一天、前一周、前一个月等的差异。完成工作所需的一切
  • 每个选项都有它的优点和缺点,仔细考虑。< /P>
    希望这会有所帮助,祝你好运。

    你能展示一下你的表结构、样本数据和你实际要做的事情的解释吗?在你的索引中包括
    fd.date