我发现MYSQL GROUP BY存在一个奇怪的问题。
我有一个查询...
SELECT schools.schoolregion,
Count(schools.schoolregion) AS regioncount,
(
SELECT Count(jobs_jobsubject)
FROM 'jobs'
WHERE 'jobs_createdDate' BETWEEN '$startofyear'
AND '$endofyear') AS regionjobstotal
FROM 'jobs'
LEFT JOIN 'schools'
ON 'jobs_schoolID'='SID'
WHERE 'jobs_createdDate' BETWEEN '$startofyear'
AND '$endofyear'
GROUP BY 'schoolRegion'
...其中我试图总计每个地区和按地区列出的职位发布数。我有两个表,一个有学校列表,另一个有工作信息,有一个列值可以连接到学校。我需要区域总数,以及一段时间内的总工作总数(因此是子查询)。
当我运行此查询时,我得到了我期望的所有内容 - 除了我在GROUP BY函数的返回结果中获得了重复的区域列表。
例如,这是我得到的表格,但不确定为什么中东的副本。
schoolRegion regioncount regionjobstotal
Africa 1 38
Asia 6 38
Middle East 20 38
Middle East 11 38
我想也许有一个额外的角色或者什么东西,但是我找不到/看到表中的值有什么不同 - 这个列的存储类型为" text"。有什么我可以检查的吗?它与查询有关吗?
任何帮助都会非常棒,非常感谢!!
答案 0 :(得分:0)
我的猜测是,schoolRegion没有订购数据。我会在您的查询中添加ORDER BY schoolRegion ASC
以确保它们是如此组织的。 :)
答案 1 :(得分:0)
首先,我认为您不能将子select语句作为父选择语句中的列提供“(SELECT COUNT(jobs_jobSubject)...”)。 此外,由于您的子项和父项的where子句是相同的,为什么不使用单个select语句并获取两者的计数。
SELECT schools.schoolRegion,
COUNT(schools.schoolRegion) AS regioncount,
COUNT(jobs_jobSubject) AS regionjobstotal
FROM 'jobs' jb
INNER JOIN 'schools' sc ON jb.jobs_schoolID=sc.SID
WHERE 'jobs_createdDate'
BETWEEN '$startofyear' AND '$endofyear'
GROUP BY 'schoolRegion'
答案 2 :(得分:0)
当我调整查询以列出学校时,只有一所学校未包含在GROUP BY中。最初我在几个小时前看过,PHPMYADMIN中的内联编辑并没有显示文本后面有一个字符返回 - 所以我写下了它是存储的值的文本。但是,当我选中框来单独编辑行而不是内联并转到该列值时 - 低并且看到 - 回车!有时它会像杀死和谦卑我的那些小东西。