2016-02-12 2 views
0

У меня есть таблица в моей базе данных, которая имеет следующий форматSQLite Группа Multiple Sub Запросы по ID

author | status 
--------------- 
Michael | New 
Michael | New 
Kevin | Repost 
Kevin | New 
Michael | Repost 
Steve | New 

Как бы построить запрос, который подсчитывает # статуса, которые являются новыми и перепечатывать и помещает их рядом с именем автора

то есть следующий запрос будет выходной

author | # new | # repost 
------------------------- 
Michael | 2 | 1 
Kevin | 1 | 1 
Steve | 1 | 0 

у меня есть проблема в том, что если есть X одного типа поста, но 0 других, вся строка disre garded.

Вот запрос у меня до сих пор:

SELECT New.post_author, Newc, Repostc from (
SELECT post_author, count(*) as 'Newc' FROM flair WHERE status = 'New' GROUP BY post_author) as New 
inner join (
SELECT post_author, count(*) as 'Repostc' FROM flair WHERE status='Repost' GROUP BY post_author) as Repost 
on New.post_author = Repost.post_author 

для следующего запроса за исключением того, что выдаст:

author | # new | # repost 
------------------------- 
Michael | 2 | 1 
Kevin | 1 | 1 

полностью пренебрегая Стив

ответ

2

Просто используйте условную агрегацию:

select post_author, 
     sum(case when status = 'New' then 1 else 0 end) as newposts, 
     sum(case when status = 'Repost' then 1 else 0 end) as reposts 
from flair f 
group by post_author;