结合多个SQL查询以提高速度

时间:2016-06-07 21:47:12

标签: mysql sql

我有一个大约有1000万行的MySQL数据库和一个简单的SQL查询:

SELECT output FROM `table` WHERE MA > Price

除了上述内容,我想得到:

  • 返回结果的平均值
  • 返回结果的标准差
  • 返回的结果总数
  • 积极的结果百分比

我现有代码的问题(如下所示)是我多次查询表。这看起来非常低效。

是否可以查询数据库一次,然后提取平均值,标准差,等信息。从结果?如果是这样,最有效的方法是什么?

SELECT STDDEV_POP(output) FROM `table` WHERE MA > Price
SELECT AVG(output) FROM `table` WHERE MA > Price
SELECT COUNT(output) FROM `table` WHERE MA > Price AND output > 0
SELECT COUNT(output) FROM `table` WHERE MA > Price AND output < 0

***编辑是否也可以获得实际的&#34;输出&#34;除了平均值,标准偏差和阳性百分比之外的值?换句话说,还可以包含以下查询吗?

SELECT output FROM `table` WHERE MA > Price

3 个答案:

答案 0 :(得分:5)

是。在这种情况下,您只需要一些条件聚合:

SELECT STDDEV_POP(output) as stddev_pop,
       AVG(output) as avg,
       SUM(output > 0) as output_gt_0,
       SUM(output < 0) as output_lt_0
FROM `table`
WHERE MA > Price;

答案 1 :(得分:1)

您可以在一个查询中执行此操作

SELECT STDDEV_POP(output)
AVG(output),
count(case when output>0 then 1 else 0 end) as count1,
count(case when output<0 then 1 else 0 end) as count2,
FROM `table` WHERE MA > Price

答案 2 :(得分:1)

您可以尝试使用一个查询抓取所有内容

   SELECT STDDEV_POP(output),AVG(output),
   SUM(output>0),
   SUM(output<0) FROM `table` WHERE MA > Price