MYSQL Multiple COUNT()与单次查询
我想通过单个查询获得行类型总数。让我解释一下 通常,我使用此查询获取其中一个:MYSQL Multiple COUNT()与单次查询,mysql,sql,count,Mysql,Sql,Count,我想通过单个查询获得行类型总数。让我解释一下 通常,我使用此查询获取其中一个: $database->query("SELECT COUNT(*) as c FROM workers WHERE job = 1"); $totalWorkers = $database->fetchObject()->c; 因此,它工作完美无瑕,但还有7种工作类型(0-8)。这只是(1) 我可以这样做:[太多的查询无法执行,不好] $database->query("SELECT COU
$database->query("SELECT COUNT(*) as c FROM workers WHERE job = 1");
$totalWorkers = $database->fetchObject()->c;
因此,它工作完美无瑕,但还有7种工作类型(0-8)。这只是(1)
我可以这样做:[太多的查询无法执行,不好]
$database->query("SELECT COUNT(*) as c FROM workers WHERE job = 1");
$totalWorkers1 = $database->fetchObject()->c;
$database->query("SELECT COUNT(*) as c FROM workers WHERE job = 2");
$totalWorkers2 = $database->fetchObject()->c;
但我不想执行这些多个查询,有没有简单的方法?我想得到这样的计数结果:
$totalWorkers2 = $database->fetchObject()->type_1;
$totalWorkers2 = $database->fetchObject()->type_2;
我到处都找过,但我找不到&想不出有什么逻辑
SELECT sum(IF(job=1,1,0)) as job1count, sum(IF(job=2,1,0)) as job2count FROM workers;
或
根据您是否希望它们位于同一记录中,您可以按作业对结果进行分组
$database->query("SELECT job, COUNT(*) as c FROM workers WHERE job in (1,2) group by job");
$tmp = $database->fetchAll();
$result = array();
foreach ($tmp as $o) $result[$o->job] = $o->c;
然后对作业=1使用数组$result
,对作业=2使用数组$result[1]
如果需要计算所有作业的数量,您可以删除“按作业筛选”(1,2)中的“按作业筛选”(filter by job)我知道,有一种非常简单的方法可以做到这一点,但我想不起来。
选择作业,按作业从工人组中计算(*)为c
?我如何获得结果$数据库->获取对象()->…为什么只使用一个查询?首先让它工作,然后优化关键部分。我总是优化我的查询,因为有大约150万条记录……第一个例子的好主意是与OPWOW要求的结果保持一致!非常感谢你,先生。这真是个好答案!快点!第一个查询可以简化:SELECT SUM(job=1),SUM(job=2).
@shmosel,SUM(job=1)
可以返回NULL
,而不是0
,如果不存在job=1
的行。@PaulSpiegel,job=1
的计算结果为0(akaFALSE
)如果job
是除1以外的任何值或NULL
。因此,只有当所有值都是NULL
,或者根本没有结果时(在这种情况下,任何SUM()
变量都将返回NULL
),您的语句才是正确的。当然,如果这是一个问题,只需执行IFNULL(SUM(…),0)
。
$database->query("SELECT job, COUNT(*) as c FROM workers WHERE job in (1,2) group by job");
$tmp = $database->fetchAll();
$result = array();
foreach ($tmp as $o) $result[$o->job] = $o->c;