2017-08-11 80 views
0

我正在参加一门关于MySQL的coursera在线课程。在其中一个练习中,我必须MySQL:分组条款

“编写一个查询,输出美国州和邮政编码(邮政编码)的每个组合中唯一User_Guids的总数,首先按状态名称按字母升序排序顺序,第二通过降序排列独特User_Guids”

总数所以我写了这样的代码:

SELECT state, zip, COUNT(DISTINCT user_guid) AS NUM_Users 
FROM users 
WHERE Country="US" 
GROUP BY zip 
ORDER BY State ASC, NUM_Users DESC; 

,并在我的回答得到5027行

正确的代码是一个明显的例外是相同的:

GROUP BY State, zip 

它得到5043行。

我很困惑。为什么我的代码不工作并给出正确答案?

谢谢!

+1

group by state。你选择国家,但由国家 –

+4

组,因为有邮政编码,可在多个国家? – Jens

+2

第一个GROUP BY无效,将在旧版本的MySQL中返回不可预知的结果,将在新版本中引发错误(除非在兼容模式下)。一般的GROUP BY规则表示:如果指定了GROUP BY子句,则每个列引用在SELECT列表中必须标识分组列或者是设置函数的参数! – jarlh

回答

0

正如Jens提到的,事实证明,有多个条目与状态,但空邮政编码。当我不按状态分组时,所有这些NULL邮政编码都会被合并为一个。

按状态和ZIP进行分组,允许这些NULL邮政编码在其各自状态下保留在输出中。