MYSQL组返回重复值

时间:2015-05-11 16:03:48

标签: mysql group-by duplicates

我发现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"。有什么我可以检查的吗?它与查询有关吗?

任何帮助都会非常棒,非常感谢!!

3 个答案:

答案 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)

OMG,我觉得自己像个菜鸟!

当我调整查询以列出学校时,只有一所学校未包含在GROUP BY中。最初我在几个小时前看过,PHPMYADMIN中的内联编辑并没有显示文本后面有一个字符返回 - 所以我写下了它是存储的值的文本。但是,当我选中框来单独编辑行而不是内联并转到该列值时 - 低并且看到 - 回车!有时它会像杀死和谦卑我的那些小东西。