2013-06-17 2 views
0

У меня есть таблица с двумя столбцами, а именно teacherid и sub_group. Теперь sub_group может иметь значения от 0 до 100, где 0 означает лекции для учителей, а что-то большее, чем 0, означает учебники. Я хочу иметь возможность рассчитать количество лекций и учебников, сгруппированных учителями.Два mysql подсчитываются с двумя разными условиями, в которых условия в одном запросе

До сих пор у меня есть два запроса, как

SELECT teacherid, count(*) as lectures FROM `ttresponsibility` where sub_group = 0 
group by teacherid 

SELECT teacherid, count(*) as tutorials FROM `ttresponsibility` where sub_group > 0 
group by teacherid 

Я хочу, чтобы объединить результаты двух в одном результирующем, что-то вроде

teacher lectures tutorials 

1   15   10 
2   14   8 

Пожалуйста, предложите ...

+0

Спасибо всем за такие быстрые ответы .. – coder101

ответ

4

Вы может использовать агрегатную функцию с выражением CASE:

select teacherid, 
    sum(case when sub_group = 0 then 1 else 0 end) lectures, 
    sum(case when sub_group > 0 then 1 else 0 end) tutorials 
from `ttresponsibility` 
group by teacherid; 

Это даст вам 3 колонки, teacherId, а затем полные лекции и учебные пособия в отдельных столбцах.

1

Это зависит от COUNT игнорирования NULLs (Отсутствующие ELSE в выражении CASE)

SELECT 
    teacherid, 
    count(CASE WHEN sub_group = 0 THEN 1 END) as lectures 
    count(CASE WHEN sub_group > 0 THEN 1 END) as tutorials 
FROM 
    `ttresponsibility` 
group by teacherid 
0

Вы можете использовать CASE заявление, чтобы получить то, что вы хотите здесь.

SELECT 
    teacherid, 
    SUM(CASE WHEN sub_group = 0 THEN 1 ELSE 0 END CASE) as lectures, 
    SUM(CASE WHEN sub_group > 0 THEN 1 ELSE 0 END CASE) as tutorials, 
FROM ttresponsibility 
GROUP BY teacherid 
0

Почти такой же решение, как и другие ребята предложили, но с функцией IF:

SELECT 
     teacherid, 
     SUM(IF(sub_group = 0, 1, 0)) as lectures, 
     SUM(IF(sub_group > 0, 1, 0)) as tutorials, 
    FROM ttresponsibility 
    GROUP BY teacherid 

Для меня это легче читать

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