我有一个包含以下数据列的表:
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/