【问题标题】:Getting and comparing averages from MySQL with PHP获取和比较 MySQL 和 PHP 的平均值
【发布时间】:2016-07-29 02:32:02
【问题描述】:

我希望能够将“上周”数据与“本周”数据进行对比,并获得百分比变化。 (即 +1.2% 或 -.5%)

这是 MySQL 表的示例:

日期          |快乐 |伤心 |生气 |害怕
2016-04-01 | 2     | 1   | 3    | 0
2016-04-02 | 3     | 1   | 3    | 1
2016-04-03 | 0     | 4   | 1    | 2
2016-04-04 | 1     | 3   | 2    | 1

假设这里至少有 14 行,我将如何获取前 7 天的平均值、前 7 天的平均值,然后创建显示百分比差异的比较?

我可以使用下面的代码获得最近 7 天的平均值,但是当我尝试重复它并更改偏移量时它失败了:

    SELECT AVG(happy), AVG(sad), AVG(angry), AVG(fearful)
      FROM table_name
      LIMIT 0, 7

【问题讨论】:

  • 查看this question约不到mysql中的一个日期
  • 请注意,您可以通过缩进四个空格将其置于固定宽度模式来创建表格数据。无需使用  来尝试排队。
  • 看看标准化

标签: php mysql


【解决方案1】:

使用子查询计算每周的平均值,使用日期范围,然后加入它们。

SELECT curWeek.happy AS curHappy, curWeek.sad AS curSad, curWeek.angry AS curAngry, curWeek.fearful AS curFearful,
       prevWeek.happy AS prevHappy, prevWeek.sad AS prevSad, prevWeek.angry AS prevAngry, prevWeek.fearful AS prevFearful,
       100*(curWeek.happy - prevWeek.happy)/prevWeek.happy AS happyChange,
       100*(curWeek.sad - prevWeek.sad)/prevWeek.sad AS sadChange,
       100*(curWeek.angry - prevWeek.angry)/prevWeek.angry AS angryChange,
       100*(curWeek.fearful - prevWeek.fearful)/prevWeek.fearful AS fearfulChange
FROM (SELECT AVG(happy) AS happy, AVG(sad) AS sd, AVG(angry) AS angry, AVG(fearful) AS fearful
      FROM tablename
      WHERE date > NOW() - INTERVAL 1 WEEK) AS curWeek
JOIN (SELECT AVG(happy) AS happy, AVG(sad) AS sd, AVG(angry) AS angry, AVG(fearful) AS fearful
      FROM tablename
      WHERE date BETWEEN NOW() - INTERVAL 2 WEEK AND NOW() - INTERVAL 1 WEEK) AS prevWeek

【讨论】:

  • 不错的解决方案@Barmar
  • 好的,哇。因此,当我认为自己是初学者时,我感觉自己夸大了自己的能力。如何使用别名?它们就像一个变量吗?
  • 是的,别名就像引用表、子查询或列的变量。
  • 我将如何“回应”,比如说本周在我的页面正文中生气?
  • 我已更新查询,使其返回当前和前一周的平均值,而不仅仅是更改。所以你可以使用echo $row['curAngry'];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多