2012-05-17 142 views
1

我正在摆弄创建子查询以适应它们。如果某个人的ID出现在联结表X次数中,我试图获得ID号和相关费用。我试过子查询中的聚合

select id, charges from myTable 
where id in 
(
    select id from jxnTable 
having (count(jxn.id> 10)) 
group by jxn.id 

这给我的错误jxn.id is invalid in the select list because it is not contained in either an aggregate function of a group by clause.

回答

2

误区三:

  • 的GROUP BY和HAVING必须是相同查询的一部分,GROUP BY必须在相应的HAVING之前以文本方式出现。
  • COUNT表达式附近的括号不正确。
  • 您没有名为jxn的表格或别名。

试试这个:

SELECT id, charges 
FROM myTable 
WHERE id IN 
(
    SELECT id 
    FROM jxnTable 
    GROUP BY id 
    HAVING COUNT(id) > 10 
) 
2

GROUP BY所属的子查询中,除了一些奇怪的()HAVING条款。

select id, charges from myTable 
where id in 
(
    select id from jxnTable 
    GROUP BY id 
    having (count(id>) 10) 
) 

这也可以用一个JOIN得罪一个子查询,而不是IN()条款,这可能会更快:

SELECT m.id, charges 
FROM myTable M 
    INNER JOIN (
    SELECT id FROM jxnTable 
    GROUP BY id 
    HAVING COUNT(id) > 10 
) cnt ON m.id = cnt.id 
+0

哎呀,对不起,我编辑你的答案,而不是我的:页面刷新,我点击了错误的链接。 – dasblinkenlight

+0

我知道这可以通过加入完成,但我试图让自己熟悉子查询:) – wootscootinboogie

+0

@dasblinkenlight我在编辑过程中弹出编辑通知 - 我的习惯是复制所有我自己的编辑所以我可以粘贴回编辑:) –