Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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
MYSQL Multiple COUNT()与单次查询_Mysql_Sql_Count - Fatal编程技术网

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(aka
FALSE
)如果
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;