这有什么错我的SQL COUNT条
问题描述:
use prime_minister_2013;
SELECT ministry.pm_name as 'PM Name',
ministry.min_begin as 'Commencement Date',
ministry.party as 'Party',
deputy_pm.deputy_name as 'Deputy Name',
governor_general.GG_title as 'Governor General Title',
governor_general.GG_name as 'Governor General Name',
COUNT(ministry.pm_name) as 'Times Elected'
FROM ministry
INNER JOIN deputy_pm ON ministry.min_nr=deputy_pm.min_nr
INNER JOIN governor_general on ministry.pm_name=governor_general.pm_name
WHERE ministry.party NOT LIKE '%ALP%' AND ministry.min_begin < '1930%'
GROUP BY ministry.pm_name
ORDER BY ministry.min_begin;
生成的表显示量的两倍首相当选为他们的名字在ministry
表和governor_general
表显示出来。 然而COUNT
条款仅限于从部长表中只计入pm_name
。这有什么错我的SQL COUNT条
当INNER JOIN
被带走时,计数是正确的。 我的查询有什么问题?
governor_general表
+--------------+----------------+----------+----------+---------+
|GG_name |GG_Title |GG_begin |GG_end |pm_name |
+--------------+----------------+----------+----------+---------+
|Baird J L |Baron Stonehaven|1925-10-08|1931-01-22|Bruce S M|
+--------------+----------------+----------+----------+---------+
答
的问题是从一个joins
未来 - 它必须包含1-n的关系,并且可以返回多个行。所以当你计算pm_names时,它会复制一些条目。
要删除这些重复项,请使用DISTINCT
和COUNT
。
SELECT ...,
COUNT(DISTINCT ministry.pm_name) as 'Times Elected'
...
但是,根据您的预期结果,您可能需要决定哪些记录是正确的返回。 Mysql对它的使用GROUP BY
有点宽容,这也许就是你为什么要返回重复计数的原因。
答
只有当每个有选举一个记录在该部表是这是否可行:
SELECT ...,
COUNT(DISTINCT ministry.unique_identifier_field_here) as 'Times Elected'
...
因为有可能是通过组合你会得到一个1到n问题的表数每民选政府时期GG的。使用PM的名字不会有帮助,因为一个PM可以跨越多次选举,所以我认为你必须使用ID来统计不同部门记录的数量(或者是该表的唯一身份)
你可以展示一些样本来自'governor_general'的数据 – Jens 2014-09-24 05:43:14
尝试'COUNT(DISTINCT ministry.pm_name)' – 2014-09-24 05:43:16
该死的错误地方请忽略 – 2014-09-24 06:01:59