2012-05-17 61 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我在編輯過程中彈出編輯通知 - 我的習慣是複製所有我自己的編輯所以我可以粘貼回編輯:) –