2015-12-20 6 views
0

Я пытаюсь выбрать количество строк из запроса выбора внутри другого запроса. Вот что у меня есть:Выберите количество строк внутри другого запроса той же таблицы

SELECT `userId`, `groupId` AS gId, (
    SELECT COUNT(*) FROM (
     SELECT * FROM `groupcommits` WHERE `groupId`=`groupcommits`.gId 
    ) temp_table 
) AS `numberOfCommitedUsers` FROM `groupcommits` 
LEFT JOIN `groups` ON `groups`.`id`=`groupcommits`.`groupId` 
LEFT JOIN `institutions` ON `institutions`.`id`=`groups`.`institutionId` 
WHERE `groupcommits`.`userId`=userId; 

Это не работает прямо сейчас, это вызывает ошибку 1064. Я хочу, для каждой строки, numberOfCommitedUsers, содержать число строк в groupcommits с этой строкой groupId. Как я могу это сделать?

Спасибо,

-

ответ

0

Вы можете сделать это с помощью связанного подзапроса:

SELECT g2.`userId`, g2.`groupId` AS gId, (
     SELECT COUNT(*) 
     FROM `groupcommits` AS g1 
     WHERE g1.`groupId`= g2.`groupId`) AS `numberOfCommitedUsers` 
FROM `groupcommits` AS g2 
LEFT JOIN `groups` ON `groups`.`id`= g2.`groupId` 
LEFT JOIN `institutions` ON `institutions`.`id`=`groups`.`institutionId` 
WHERE g2.`userId`= userId; 

Дополнительный уровень вложенности вы использовали в подзапроса является излишним.

+0

Благодарим за отзыв! Когда я запускаю это, я получаю эту ошибку: '# 1054 - Неизвестный столбец 'groupcommits.gId' в 'where clause''. Почему это? Вы знаете, что может вызвать это? –

+0

@UnknownUser Использование псевдонимов таблиц упрощает некоторые вещи, которые я думаю. Пожалуйста, проверьте изменения, которые я сделал. –

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