2014-09-06 65 views
-1
$req = $db->prepare('SELECT AVG(CASE target WHEN ("NPS" OR "NA") THEN target ELSE NULL end) AS target, AVG(CASE planned_qty WHEN ("NA" OR "NPS") THEN null ELSE planned_qty end) AS planned_qty, AVG(CASE encap_planned WHEN ("NA" OR "NPS") THEN null ELSE encap_planned end) AS encap_planned,AVG(CASE open_wo WHEN ("NA" OR "NPS") THEN null ELSE open_wo end) AS open_wo WHERE date_production >= CAST("'.$dateArray[0].'" AS DATE) AND date_production <= CAST("'.$dateArray[6].'" AS DATE)'); 
  • ID = 1(Primary_Key)
  • 目標= 700(VARCHAR)
  • Planned_qty = NA(VARCHAR)
  • encap_planned = NPS(VARCHAR )
  • open_wo = 2(VARCHAR)

我的查詢執行成功(700 + 2)/ 2 = 351,它沒有CON旁邊是兩個字符「NA」和「NPS」。檢查是否是由case語句上AVG功能編號

我要求忽略所有字符並僅計算數字的AVG。

我想通過case語句使用它。 AVG(情況......當......結束)

感謝

回答

0

下使用正則表達式來確定是否值是數字:

SELECT AVG(CASE WHEN target REGEXP '^[-]?[0-9]+[.]?[0-9]*$' THEN target end) AS target, 
     AVG(CASE WHEN planned_qty REGEXP '^[-]?[0-9]+[.]?[0-9]*$' THEN planned_qty end) AS planned_qty, 
     AVG(CASE WHEN encap_planned REGEXP '^[-]?[0-9]+[.]?[0-9]*$' THEN encap_planned end) AS encap_planned, 
     AVG(CASE WHEN open_wo REGEXP '^[-]?[0-9]+[.]?[0-9]*$' THEN open_wo end) AS open_wo 

一個from條款會有所幫助,但你的問題真的只是關於SELECT