2012-05-17 2 views
1

Я занимаюсь созданием подзапросов, чтобы привыкнуть к ним. Я пытаюсь получить идентификатор ID и расходы, связанные с человеком, если их идентификатор появляется в таблице соединений X раз. Я попыталсяАгрегаты в подзапросе

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 Я был в процессе редактирования, когда появилось уведомление о редактировании - моя привычка копировать все мои собственные изменения поэтому я могу вставить его обратно в редактирование :) –

Смежные вопросы