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

时间:2014-03-08 10:40:40

标签: mysql sql

我希望有一个表格上有几个统计信息(摘要)。表名是“jobs”,一些所需的统计信息是:

活跃的职位数,处于非活动状态的职位数,需要男性职位的职位数,每月支付超过x金额的职位数,......

我需要一个查询来从“作业”表中提取所有这些统计信息,然后输入一行结果。查询结果应如下所示:

+---------------+---------------+---------------+-----+
| stats1_column | stats2_column | stats3_column | ... |
+---------------+---------------+---------------+-----+
| x             | y             | z             | ... |
+---------------+---------------+---------------+-----+

毕竟,您认为我获取表格摘要正如我正在做的那样吗?或者我错了,还有更好的方法吗?

我正在使用MySQL数据库开发一个PHP项目。

3 个答案:

答案 0 :(得分:1)

您可能会对每个类别使用COUNT()聚合函数,然后使用UNION ALL,然后按GROUP_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

参见示例 Fiddle Demo

答案 1 :(得分:0)

这将是这样的:

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

这种方法/查询的问题在于它效率低,因为它扫描整个表。如果表有很多行,性能将受到影响。

如果表具有正确的索引,则更有效的方法是为您需要的每个统计信息运行查询。在PHP中,这将是(忽略拼写错误):

$stats = array(
    'stats_active' => 'SELECT COUNT(*) FROM jobs WHERE active',
    'stats_inactive' => 'SELECT COUNT(*) FROM jobs WHERE NOT active', 
    'stats_needs_male' => 'SELECT COUNT(*) FROM jobs WHERE needs_male',  
    .... others here ....
);
$result = (object) array();
foreach($stats as $name => $query) {
    $result->$name = db_fetch_single_result($query); // database specific code goes here
}

答案 2 :(得分:-1)

这是一种难以阅读,但我认为你想要的,但可能是错的是这样的?

Select
stats1_column,
stats2_column,
stats3_colum
From 
Jobs

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