2016-06-07 44 views
0

我有一個MySQL數據庫與約10萬行和一個簡單的SQL查詢:將多個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 

***編輯除了平均值,標準差和百分比正數之外,是否還可以獲得實際的「輸出」值?換句話說,下列查詢是否也可以合併?

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; 
+0

最有效的解決方案 –

+0

嗨戈登,感謝您的回覆。除了平均值,標準偏差和正面百分比之外,是否還可以獲得實際的「輸出」值? –

+0

@NedHulton。 。 。我不明白。這返回一行,但你似乎要求許多行。 –

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 
+0

當條件變爲您想要的值時,您不需要case語句。 –

+0

嗨Cableload,謝謝你的回覆。除了平均值,標準偏差和正面百分比之外,是否還可以獲得實際的「輸出」值? –

1

你可以嘗試抓住他們都與一個查詢

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

Hi Tin Tan,謝謝你的回覆。除了平均值,標準偏差和正面百分比之外,是否還可以獲得實際的「輸出」值? –

+0

我想你必須運行不同的查詢。因爲這些函數是集合函數,所以如果你想要單獨的輸出值,你必須運行另一個查詢。這就是你想要的不是單個輸出值? –