Имена столбцов SQL и их упорядочение по дате

0

У меня есть таблица как таковая:

date       | page
-----      |-----
2018-01-01 | good
2018-01-01 | good
2018-01-01 | good
2018-01-01 | bad
2018-01-02 | good

Как организовать по значениям в столбце страницы по дате как таковой:

date       | good | bad
-----      |------|----
2018-01-01 | 3    | 1
2018-01-02 | 1    | 0
  • 0
    Отметьте СУБД (т.е. MySQL , SQL Server и т. Д.), Которую вы используете.
  • 0
    Просто сделал @YogeshSharma
Теги:
date

4 ответа

1
Лучший ответ

Вам нужна условная агрегация:

select date, 
       sum(case when page = 'good' then 1 else 0 end) as good, 
       sum(case when page = 'bad' then 1 else 0 end) as bad
from table t
group by date;

Тем не менее, MySQL имеет сокращение для этого:

select date, 
       sum( page = 'good') as good, 
       sum( page = 'bad' ) as bad
from table t
group by date;
  • 0
    Так как же это масштабировать? Например, что если существует более двух состояний: «хорошее», «отличное» и «плохое»?
  • 0
    @ Sshah98. , , Если у вас есть известные page то вы можете просто написать sum() иначе вам потребуется написать динамический сводный запрос для этого.
1

Это может просто добавить случай внутри функции sum:

select date, 
       sum( case when page = 'good' then 1 else 0 end) as good, 
       sum( case when page = 'bad' then 1 else 0 end ) as bad 
from table t 
group by date
1

Используя pivot таблицу как,

 create table #pivot(date date,page varchar(20))
 insert into #pivot values
 ('2018-01-01','good')
 ,('2018-01-01','good')
 ,('2018-01-01','good')
 ,('2018-01-01','bad')
 ,('2018-01-02','good')

 select date,good,bad from(  
 select date, page from #pivot 
 ) f
 pivot
( count(page) for page in (good,bad)
) p 
0

Я не уверен, какую платформу вы используете, но если она в Oracle, это будет делать то же самое.

select date, sum(decode(page,'good',1,0)) as good, sum(decode(page,'bad',1,0)) as bad              
from table t                                                                       
group by date;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню