Mysql SQL:获取表摘要/统计信息

Mysql SQL:获取表摘要/统计信息,mysql,sql,Mysql,Sql,有一个表,我想有几个统计数据(摘要)。表名为“作业”,所需的一些统计信息包括: 处于活动状态的工作数量、处于非活动状态的工作数量、需要男性强制的工作数量、每月支付超过x金额的工作数量 我需要一个查询,将所有这些统计数据从“jobs”表中提取出来,并放入一行结果中。查询结果应如下所示: +---------------+---------------+---------------+-----+ | stats1_column | stats2_column | stats3_column | .

有一个表,我想有几个统计数据(摘要)。表名为“作业”,所需的一些统计信息包括:

处于活动状态的工作数量、处于非活动状态的工作数量、需要男性强制的工作数量、每月支付超过x金额的工作数量

我需要一个查询,将所有这些统计数据从“jobs”表中提取出来,并放入一行结果中。查询结果应如下所示:

+---------------+---------------+---------------+-----+
| stats1_column | stats2_column | stats3_column | ... |
+---------------+---------------+---------------+-----+
| x             | y             | z             | ... |
+---------------+---------------+---------------+-----+
SELECT SUM(IF(active, 1, 0)) stats_active, 
    SUM(IF(active, 0, 1)) stats_inactive,
    SUM(IF(needs_male, 1, 0)) stats_needs_male,
    SUM(IF(pay > 1000, 1, 0)) stats_well_paid,
.... and so on ....
FROM jobs
毕竟,你认为我能像我现在做的那样正确地获取表摘要吗?还是我错了,还有更好的办法


我正在使用MySQL数据库进行一个PHP项目。

这是一个很难理解的问题,但我认为您想要的,但可能是错误的是这样的

Select
stats1_column,
stats2_column,
stats3_colum
From 
Jobs

这是非常基本的,这就是为什么我不确定这是否是你想要的

应该是这样的:

+---------------+---------------+---------------+-----+
| stats1_column | stats2_column | stats3_column | ... |
+---------------+---------------+---------------+-----+
| x             | y             | z             | ... |
+---------------+---------------+---------------+-----+
SELECT SUM(IF(active, 1, 0)) stats_active, 
    SUM(IF(active, 0, 1)) stats_inactive,
    SUM(IF(needs_male, 1, 0)) stats_needs_male,
    SUM(IF(pay > 1000, 1, 0)) stats_well_paid,
.... and so on ....
FROM jobs
这种方法/查询的问题是效率低下,因为它扫描整个表。如果表中有很多行,性能将受到影响

如果表具有适当的索引,则更有效的方法是为所需的每个stat运行查询。在PHP中,这类似于(忽略拼写错误):


您可能会对每个类别使用
COUNT()
聚合函数,然后
UNION ALL
,然后通过
GROUP\u CONCAT()
将行转换为列。以下是您可能有的查询:

SELECT  
GROUP_CONCAT(if(Category = 'Active Jobs', CategoryCount, NULL)) AS 'Active_Jobs', 
GROUP_CONCAT(if(Category = 'Inactive Jobs', CategoryCount, NULL)) AS 'Inactive_Jobs'  
FROM
(
 SELECT 'Active Jobs' as Category, COUNT(*) as CategoryCount
 FROM Jobs
 WHERE Status = 'Active'
 UNION ALL
 SELECT 'Inactive Jobs' as Category, COUNT(*) as CategoryCount
 FROM Jobs
 WHERE Status = 'Inactive'
) tbl

参见示例

请您更具体地回答这个问题好吗?