并非如此简单的按日期分组2数据集mysql
我的数据库中有一个并非如此简单的按日期分组2数据集mysql,mysql,sql,Mysql,Sql,我的数据库中有一个jobs表 工作属于专业 工作属于行业 工作属于区域 我想从表中选择作业,并根据date\u published字段对它们进行分组(计数),与另一组具有不同条件的作业进行比较 例如,我想选择2012-01-01之后发布的作业,按月/年对它们进行分组,以获得月度统计数据,并将总和与在where条件中指定了profession.id的另一组作业进行比较: SELECT count(jobs.id), count(jobs2.id), DATE(jobs.
jobs
表
工作属于专业工作属于行业
工作属于区域 我想从表中选择作业,并根据
date\u published
字段对它们进行分组(计数),与另一组具有不同条件的作业进行比较
例如,我想选择2012-01-01之后发布的作业,按月/年对它们进行分组,以获得月度统计数据,并将总和与在where条件中指定了profession.id的另一组作业进行比较:
SELECT count(jobs.id),
count(jobs2.id),
DATE(jobs.date_published)
FROM jobs, jobs jobs2
WHERE jobs.date_published > '2010-01-01'
AND jobs.date_published = jobs2.date_published,
AND jobs2.profession_id IN (1, 2, 3)
GROUP BY
MONTH(jobs.date_published),
YEAR(jobs.date_published)
ORDER BY
YEAR(jobs.date_published) DESC,
MONTH(jobs.date_published) DESC
但是上面的例子是错误的,因为它导致服务器不响应并无限处理查询。我怎样才能修好它
我相信这与jobs.date_published=jobs2.date_published
声明有关。系统中有许多作业具有相同的发布日期。日期。在选择中选择日期列没有任何意义。您需要按日期分组,或者选择年和月部分
这种模式应该更快。根据具体要求,您可以删除嵌套查询:
Select
Year(date_published) Year,
Month(date_published) Month,
Sum(job_count_1) job_count_1,
Sum(job_count_2) job_count_2
From (
Select
date_published,
Sum(Case When profession_id In (1, 2, 3) Then 1 Else 0 End) as job_count_1,
Count(*) as job_count_2
From
jobs
Where
date_published > '2010-01-01'
Group By
date_published
Having
Sum(Case When profession_id In (1, 2, 3) Then 1 Else 0 End) > 0
) a
Group By
Year(date_published),
Month(date_published)
Order By
1 Desc,
2 Desc
在(date_published,profession_id)上有一个索引将加快速度,因为引擎应该能够只使用索引回答查询
这是一个例子。有了这些数据,您希望得到什么样的答案?首先使用显式
JOIN
语法。您也不应该选择不在聚合中的属性。您好,我使用了内部联接来联接记录,但它对性能没有帮助。这看起来很有希望。我将在一段时间内让您知道结果。如何添加其他筛选语句?我还想按扇区id和区域id过滤数据。@user197483这取决于要将它们添加到比较的哪一侧。用少量的示例数据和所需的结果回答会容易得多。我想在比较的不同方面添加不同的陈述,并且我想同时创建两个以上的比较。本例简化了过滤器的数量,但根据用户的选择,在live数据库中有9个过滤器可动态应用。