GROUP BY,HAVING和JOINS的问题

问题描述:

所以这个查询的目的是显示罪犯的ID,姓氏和名字(所有这些都可以在“罪犯”表中找到),然后只显示有超过一个句子的罪犯 - 我通过使用HAVING子句来做到这一点,该句子显示罪犯必须具有多于一个sentence_id(句子表主键)的情况。当我在下面的代码类型然而,我收到一个错误,说:“这是用于列命名加入(或自然连接或使用USING子句的JOIN)不能有一个明确的限定。GROUP BY,HAVING和JOINS的问题

SELECT c.criminal_id, c.last, c.first 
FROM criminals c JOIN sentences s USING (criminal_id) 
GROUP BY s.criminal_id 
HAVING COUNT(s.sentence_id) > 1; 

我尝试删除限定符(我知道它是列名前面的c和s),但后来发现一个错误,表示查询不是GROUP BY表达式。在这里试图弄清楚这件事情,如果你能帮忙,我会很感激。谢谢。

没关系!如果有人看到这个,我找到了真正的错误,我删除了限定符。当您在使用GROUP时选择多个列P BY子句中,您必须GROUP BY ALL非聚合函数。所以我的正确的代码是这样的:

SELECT criminal_id, last, first 
FROM criminals JOIN sentences USING (criminal_id) 
GROUP BY criminal_id, last, first 
HAVING COUNT(sentence_id) > 1; 

希望这可以帮助任何人偶然发现这个问题。

+2

虽然我会建议把别名放在'c.last,c.first'上。更好的是,避免使用USING语法并明确指出:'ON c.criminal_id = s.criminal_id'。 – 2014-11-21 03:09:05