【问题标题】:Check if is number on AVG function by case statement [closed]通过case语句检查AVG函数是否为数字[关闭]
【发布时间】:2014-09-06 19:59:35
【问题描述】:
$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,它不考虑“NA”和“NPS”这两个字符。

我要求忽略所有字符并仅计算数字的 AVG。

我想通过 case 语句来使用它。 AVG(case ... when ... end)

谢谢

【问题讨论】:

    标签: php mysql sql database pdo


    【解决方案1】:

    下面使用正则表达式判断值是否为数值:

    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 有关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 2015-01-02
      • 2019-08-01
      • 1970-01-01
      • 2018-10-29
      相关资源
      最近更新 更多