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