子查询中的聚合

时间:2012-05-17 18:24:34

标签: sql

我正在摆弄创建子查询只是为了习惯他们。如果他们的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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
)
相关问题