Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL中的关闭百分比数学_Php_Mysql_Math_Average - Fatal编程技术网

Php MYSQL中的关闭百分比数学

Php MYSQL中的关闭百分比数学,php,mysql,math,average,Php,Mysql,Math,Average,我想在查询中做数学运算,我想知道用PHP还是MYSQL做比较好。 另外,如果我选择MYSQL,任何人都可以帮助我进行查询 到目前为止我有 SELECT COUNT(*) as total, booker, appdate, SUM(CASE WHEN status='DNS' THEN 1 ELSE 0 END) book, SUM(CASE WHEN status!='DNS' THEN 1 ELSE 0 END) tot FROM appts WHERE WEEK(app_d

我想在查询中做数学运算,我想知道用PHP还是MYSQL做比较好。 另外,如果我选择MYSQL,任何人都可以帮助我进行查询

到目前为止我有

  SELECT COUNT(*) as total, booker, appdate,
  SUM(CASE WHEN status='DNS' THEN 1 ELSE 0 END) book,
  SUM(CASE WHEN status!='DNS' THEN 1 ELSE 0 END) tot
  FROM appts WHERE WEEK(app_date)= WEEK(CURDATE()) GROUP BY booker
我想从这个查询中再得到一个数据。 我想做一本书 但很明显,只有当这本书=0或tot=0,因为很明显我不想把任何东西除以0

有没有办法在MYSQL查询中做到这一点

我希望我的输出是

       book  | 14
       tot   | 25
       hold  | 35%

我还想按持有百分比从高到低订购。这可能吗???

您可以使用子查询实现您的要求,如下所示:

选择*,IFbook+tot,100*book/book+tot,空为保留 从…起 选择COUNT*作为总计、booker、appdate、, SUMstatus='DNS'书,SUMstatus!='DNS'DNS的tot 来自应用程序,其中WEEKapp_日期=booker的WEEKCURDATE组 作为子查询 按保留说明订购
注意,在一些地方,我使用MySQL使用数字作为逻辑值的事实。因此,您可以不带大小写地汇总条件,也可以不带0检查地为IF编写公式。

您可以使用子查询来实现您的要求,如下所示:

选择*,IFbook+tot,100*book/book+tot,空为保留 从…起 选择COUNT*作为总计、booker、appdate、, SUMstatus='DNS'书,SUMstatus!='DNS'DNS的tot 来自应用程序,其中WEEKapp_日期=booker的WEEKCURDATE组 作为子查询 按保留说明订购 注意,在一些地方,我使用MySQL使用数字作为逻辑值的事实。因此,您可以不带大小写地总结条件,也可以不带0检查地为IF编写公式。

朴素方法:

选择 把*算作总数, 当status='DNS'时的SUMCASE,然后是1 ELSE 0 END book, 状态为时的SUMCASE!='DNS'然后1其他0结束tot, 如果SUMCASE WHEN status!='DNS'然后是1或0结束+ 当status='DNS'然后1 ELSE 0 END=0时的SUMCASE, 0, 当status='DNS'然后1 ELSE 0结束时的SUMCASE/ 状态为时的SUMCASE!='DNS'然后是1或0结束+ 当status='DNS'然后1 ELSE 0结束时的SUMCASE 保留 来自appts 其中WEEKapp_date=booker的WEEKCURDATE组 持票命令; 或者,为了不重复别名,请使用子查询:

选择*,如果book+tot=0,则选择0,book/book+tot*100 从…起 选择 把*算作总数, 当status='DNS'时的SUMCASE,然后是1 ELSE 0 END book, 状态为时的SUMCASE!='DNS'然后1其他0结束tot, 来自appts 其中WEEKapp_date=booker的WEEKCURDATE组 作为subq 持票命令; 或者更聪明地说:book+tot=total

选择*,如果总数=0,则选择0,书本/总数*100 从…起 选择 把*算作总数, 当status='DNS'时的SUMCASE,然后是1 ELSE 0 END book, 状态为时的SUMCASE!='DNS'然后1其他0结束tot, 来自appts 其中WEEKapp_date=booker的WEEKCURDATE组 作为subq 持票命令; 而且,只是为了好玩,最简陋的形式:

选择*,合并账簿/总计*100,0作为保留-除以0返回空值 从…起 选择 总数, SUMstatus='DNS'book,-boolean true在内部为整数1 SUMstatus!='DNS的tot, 来自appts 其中WEEKapp_date=booker的WEEKCURDATE组 作为subq 持票命令; 朴素的方法:

选择 把*算作总数, 当status='DNS'时的SUMCASE,然后是1 ELSE 0 END book, 状态为时的SUMCASE!='DNS'然后1其他0结束tot, 如果SUMCASE WHEN status!='DNS'然后是1或0结束+ 当status='DNS'然后1 ELSE 0 END=0时的SUMCASE, 0, 当status='DNS'然后1 ELSE 0结束时的SUMCASE/ 状态为时的SUMCASE!='DNS'然后是1或0结束+ 当status='DNS'然后1 ELSE 0结束时的SUMCASE 保留 来自appts 其中WEEKapp_date=booker的WEEKCURDATE组 持票命令; 或者,为了不重复别名,请使用子查询:

选择*,如果book+tot=0,则选择0,book/book+tot*100 从…起 选择 把*算作总数, 当status='DNS'时的SUMCASE,然后是1 ELSE 0 END book, 状态为时的SUMCASE!='DNS'然后1其他0结束tot, 来自appts 其中WEEKapp_date=booker的WEEKCURDATE组 作为subq 持票命令; 或者更聪明地说:book+tot=total

选择*,如果总数=0,则选择0,书本/总数*100 从…起 选择 把*算作总数, 当status='DNS'时的SUMCASE,然后是1 ELSE 0 END book, 状态为时的SUMCASE!='DNS'然后1其他0结束tot, 来自appts 其中WEEKapp_date=booker的WEEKCURDATE组 作为subq 持票命令; 而且,只是为了好玩,最简陋的形式:

选择*,合并账簿/总计*100,0作为保留-除以0返回空值 从…起 选择 总数, SUMstatus='DNS'book,-boolean true在内部为整数1 SUMstatus!='DNS的tot, 来自appts 其中WEEKapp_date=booker的WEEKCURDATE组 作为subq 持票命令; @KyleK顺便说一句,total永远不会是0,因为如果COUNT*=0,那么就根本没有行:@KyleK顺便说一句,total永远不会是0,因为如果COUNT*=0,那么就没有行 完全没有行: