2015-04-29 4 views
0

У меня есть две таблицы abb и abb_click.Группа и счет возвращены SQL

abb содержит информацию об объекте ident, который активен. abb_click содержит информацию от каждого student_id относительно каждого ident.

Я «просто» хочу считать активное идент в abb_click для конкретного student_id.

SELECT, ниже, кажется, рассчитывать только активный IDENT с, не принимая никакого беспокойства, если идент в abb_click.

Вы можете увидеть скрипку здесь: http://sqlfiddle.com/#!9/b7262/1


Результат должен быть: для student_id 945 - 2 активных идент сек

Вопрос: Как я " tweak "SELECT для подсчета активных идентификатор s в таблице abb присоединился к abb_click?


SELECT t.student_id, number_of_idents 
FROM `abb_click` AS t 
    INNER JOIN 
     (SELECT ident, COUNT(ident) as number_of_idents FROM `abb` AS k 
     WHERE k.active = '1' 
    ) AS t3 
    ON t.ident = t3.ident 
WHERE t.student_id = '945' 
GROUP BY t.student_id 
ORDER BY number_of_idents ASC; 

Таблица abb

bid, ident, active 

Таблица abb_click

kid, ident, student_id, click 

данных в таблице abb

1, 'ma53', 1 
2, 'ma664', 1 
3, 'ma779', 0 
4, 'ma919', 1 

Данные таблицы abb_click

1, 'ma53', 945, 'E' 
2, 'ma53', 945, 'E' 
3, 'ma53', 945, 'C' 
4, 'ma664', 945, 'C' 
5, 'ma664', 945, 'A' 
6, 'ma664', 945, 'E' 
7, 'ma779', 945, 'A' 

ответ

1

Я считаю, что это должно делать то, что вы хотите.

select student_id, COUNT(distinct ac.ident) as active_idents 
from abb_click ac 
join abb on abb.ident = ac.ident 
where abb.active = 1 
--and student_id = 945 
group by student_id 
+0

Очень аккуратно и отлично работает (с дополнительным 'AND student_id = 945'). Большое спасибо за ваше время и помощь. Спасибо @Sander! – Per76

1

если я не промах, понял это должно работать.

SELECT abb.*, COUNT(abb_click.id) as total_abb_clicks 
FROM abb 
INNER JOIN abb_click ON abb_click.ident = abb.ident 
WHERE abb.active = 1 && abb_click.student_id = 945 
GROUP BY abb.id 

- Edit: К сожалению, я забыл состояние студента. Таким образом, это должно вернуться:

предложение, идентификационный, активный, total_abb_clicks
1, 'ma53', 1, 3
2, 'ma664', 1, 3
4, 'ma919', 1, 1

+1

Спасибо @Camway. Не совсем тот результат, который я хотел, но очень полезный. – Per76

+2

Теперь, видя ответ, я вижу, откуда вы пришли; Я пропустил понимание. – Camway

1

Вы можете возвратить различные значения идент и student_id, группируя их, а затем присоединение с abb и делать подсчет:

SELECT click.student_id, COUNT(click.ident) as total_abb_clicks 
FROM abb 
INNER JOIN (select ident, student_id from abb_click group by ident, student_id) click ON click.ident = abb.ident 
WHERE abb.active = 1 and click.student_id=945 
GROUP BY click.student_id 
+1

Это работает отлично. Большое спасибо за ваше время и помощь. Спасибо @ Сами Кухмона! – Per76

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