Sql 子查询中的聚合

Sql 子查询中的聚合,sql,Sql,我正忙于创建子查询,只是为了适应它们。我试图获得一个ID,如果一个人的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在选择列表中无效,因为它不包含在group by子句的聚合函数中。除了HAVING子句中的一些奇数()

我正忙于创建子查询,只是为了适应它们。我试图获得一个ID,如果一个人的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在选择列表中无效,因为它不包含在group by子句的聚合函数中。

除了
HAVING
子句中的一些奇数
()
之外,您的
group by
还属于子查询中

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

除了
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
三个错误:

  • GROUP BY和HAVING必须是同一查询的一部分,GROUP BY必须以文本形式出现在相应HAVING之前
  • 计数表达式周围的括号不正确
  • 您没有名为
    jxn
    的表或别名
请尝试以下方法:

SELECT id, charges
FROM myTable
WHERE id IN
(
    SELECT id
    FROM jxnTable
    GROUP BY id
    HAVING COUNT(id) > 10
)
三个错误:

  • GROUP BY和HAVING必须是同一查询的一部分,GROUP BY必须以文本形式出现在相应HAVING之前
  • 计数表达式周围的括号不正确
  • 您没有名为
    jxn
    的表或别名
请尝试以下方法:

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

哦,很抱歉我编辑了你的答案而不是我的:页面刷新了,我点击了错误的链接。我知道这可以通过加入来完成,但是我正在尝试熟悉子查询:)@dasblinkenlight我正在编辑的过程中,突然出现了编辑通知-我的习惯是复制我自己的所有编辑,这样我就可以将其粘贴回编辑:)@wootscootinboogie他们都使用子查询-一个是()
子查询,另一个是
联接
子查询。@Michael,我明白了。这种或那种方式有什么特别的好处吗?哦,很抱歉我编辑了你的答案而不是我的:页面刷新了,我点击了错误的链接。我知道这可以通过加入来实现,但是我正在尝试熟悉子查询:)@dasblinkenlight我正在编辑的过程中,突然出现了编辑通知-我的习惯是复制我自己的所有编辑,这样我就可以将其粘贴回编辑:)@wootscootinboogie他们都使用子查询-一个是()子查询,另一个是
联接
子查询。@Michael,我明白了。这种或那种方式有什么特殊的优势吗?