我有一个大约有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
答案 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