嗨,我正在尝试查找同一列中多个值的平均值之间的差异。

这是模式。

CREATE TABLE `product_priceDiff` (
  `mark` char(15) NOT NULL,
  `markId` int(11) NOT NULL,
  `found_date` date DEFAULT '0000-00-00',
  `found_price` decimal(15,3) DEFAULT NULL,
  `confirmation_date` date DEFAULT '0000-00-00',
  `confirmed_price` decimal(15,3) DEFAULT NULL,
  `price_difference` decimal(15,3) DEFAULT NULL,
  `action` char(30) DEFAULT NULL,
  PRIMARY KEY (`mark`,`markId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |


这是一些示例值

+------------------+----------+------------+-------------+-------------------+-----------------+------------------+--------+
| mark             | markId   | found_date | found_price | confirmation_date | confirmed_price | price_difference | action |
+------------------+----------+------------+-------------+-------------------+-----------------+------------------+--------+
| soap             |        6 | 2014-01-13 |       0.410 | 2014-01-15        |           0.420 |            2.439 | BUY    |
| lotion           |        7 | 2013-09-13 |       0.000 | 2013-09-13        |           0.170 |            0.000 | BUY    |
| shaving_cream    |        8 | 2014-01-09 |      41.500 | 2014-01-10        |          42.000 |            1.205 | BUY    |    |
| hairgel          |       19 | 2014-01-13 |       8.220 | 2014-01-16        |           8.190 |           -0.365 | SELL   |
| aftershaves      |       20 | 2011-07-12 |       0.000 | 2011-07-12        |           7.500 |            0.000 | SELL   |
| shampoo          |       21 | 2014-01-14 |      46.870 | 2014-01-17        |          46.480 |           -0.832 | SELL   |
+------------------+----------+------------+-------------+-------------------+-----------------+------------------+--------+


我想找到的是平均价格差异。公式是

Average(price_difference) @ BUY - Average(price_difference) @ SELL


我尝试使用此查询来执行此操作,但它根本不起作用

SELECT
    AVG(CASE WHEN `action` = "BUY" THEN `price_difference`)
    - AVG(CASE WHEN `action` = "SELL" THEN `price_difference`)
    FROM `product_priceDiff`;


这给我一个错误


  错误1064(42000):您的SQL语法有错误;检查
  与您的MySQL服务器版本相对应的手册
  在'action =“ BUY”然后price_difference附近使用的语法)-avg(case
  当action =“ SELL”然后在第1行定价“


请提供任何有关我应该如何获得所需值的建议。提前致谢

麦克斯

最佳答案

记录:

问题是CASE statement的“语法”。

CASE WHEN <condition> THEN <action> END


您错过了END

关于mysql - MySQL-选择同一列的平均值之差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21454477/

10-12 12:44
查看更多