php - MySQL 基于组内条件的记录计数

标签 php mysql

我有一个包含以下数据列的表:

ord_number check
OR123      0
OR125      1
OR123      2
OR123      0
OR124      0
OR124      0
OR125      0
OR123      0

检查列指示我们是否已完全供应订单行,值为零或以下表示“是的,我们已提供完整”,值为 1 或以上表示“否,我们尚未提供完整”。

要计算订单履行率(有多少订单已完成),我需要知道有多少订单的每个条目的检查结果仅为零,有多少订单的检查结果至少为正。

我的逻辑是,我需要对项目进行分组,然后在组内执行 COUNTIF(这可能是错误的 SQL 方法,但从逻辑上讲,就我正在寻找的结果而言,它对我来说是有意义的)。从这个查询中,我需要将这两个值返回到我的 PHP 脚本中。

该数据集的结果将是: Complete = 1(只有零支票的订单) 不完整 = 2(一行或多行有肯定检查的订单)

我花了一个上午试图找到解决方案,但找不到任何我足够理解或足够相似的东西,以至于我可以分解并理解它。

如果有人可以为我指明正确的方向或提供示例并提供解释,我将不胜感激。

最佳答案

对于具有 2 个计数器字段的 1 行,使用:

SELECT 
  SUM(CASE WHEN `check` = 1 THEN 1 ELSE 0 END) AS incomplete,
  SUM(CASE WHEN `check` = 0 THEN 1 ELSE 0 END) AS complete
FROM orders

对于具有 1 个名称的 2 行,使用:

 SELECT COUNT(`ord_number`) AS fulfillment 
 FROM orders WHERE (`check`=0) 
 UNION SELECT COUNT(ord_number) 
 FROM orders WHERE (`check`=1)

在这种情况下,您需要将第 1 行放入 $complete (check=0) 并将第 2 行放入 $incomplete (check=1)

你可以添加:

 UNION SELECT COUNT(ord_number) FROM orders

这将为您提供第 3 行的总记录。

输出将是:

 SELECT * FROM orders

 ord_number  check
 ---------------------
 OR123        0
 OR124        1
 OR125        0
 OR126        0
 OR127        0
 OR123        0
 OR125        1


SELECT COUNT(`ord_number`) AS counts FROM orders or1 WHERE (`check`=0) 
UNION SELECT COUNT(ord_number) FROM orders or2 WHERE (`check`=1) 
UNION SELECT COUNT(ord_number) FROM orders

 counts
 -------
 5
 2
 7


 SELECT
 SUM(CASE WHEN `check` = 1 THEN 1 ELSE 0 END) AS incomplete, 
 SUM(CASE WHEN `check` = 0 THEN 1 ELSE 0 END) AS complete FROM orders

 incomplete complete
 -------------------------
  2         5

至于PHP:

对于 1 行:

mysql_select_db($database_test, $test);
$query_countIn1Row = " SELECT SUM(CASE WHEN `check` = 1 THEN 1 ELSE 0 END) AS  
    incomplete, 
SUM(CASE WHEN `check` = 0 THEN 1 ELSE 0 END) AS complete
FROM orders";
$countIn1Row = mysql_query($query_countIn1Row, $test) or die(mysql_error());

do {
    $varIncomplete = $row_countIn1Row['incomplete'];
    $varComplete = $row_countIn1Row['complete'];
} while ($row_countIn1Row = mysql_fetch_assoc($countIn1Row));

对于 1 列计数:

mysql_select_db($database_test, $test);
$query_countOrders = "SELECT COUNT(`ord_number`) AS counts 
FROM orders or1 WHERE (`check`=0) 
UNION SELECT COUNT(ord_number) FROM orders or2 WHERE (`check`=1)
UNION SELECT COUNT(ord_number) FROM orders";
$countOrders = mysql_query($query_countOrders, $test) or die(mysql_error());

$myCounts = array();
 do {
    $myCounts[]= $row_countOrders['counts'];
 } while ($row_countOrders = mysql_fetch_assoc($countOrders));
 $complete = $myCounts[0];
 $incomplete = $myCounts[1];
 $total = $myCounts[2];

关于php - MySQL 基于组内条件的记录计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20521444/

相关文章:

php - 如何在wordpress插件中包含一个html文件

php - 如何在 cakephp 中创建带有联接的查询

c# - 由于 SQL 字符串而重复值?

mysql - 连接上的最小行

python - 如何将 xampp 中的 MYSql 用于 python 3?

php - 创建 Wordpress 子插件

php - 如何防止二阶 SQL 攻击?

php - 使用 https 找不到 Laravel 路由

php - Mysql 字段回显

java - 如何将运行时已知的值 ('how many' 传递给 SQL 查询