Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!




Кто прикинет, что же изображено на этих графиках?

DayOfWeek PostCount ViewCount StarCount CommentCount AvgPostCountByDay AvgViewCount AvgStarCount AvgCommentCount --------- --------- --------- --------- ------------ ----------------- ------------- ------------ --------------- Sunday 606 17188164 77173 34109 22 28363.306930 127.348184 56.285478 Monday 1524 30536458 164363 57147 58 20037.045931 107.849737 37.498031 Tuesday 1509 31084019 153654 62523 55 20599.084824 101.825049 41.433399 Wednesday 1517 31414848 144898 67220 54 20708.535266 95.516150 44.311140 Thursday 1486 31617186 139553 61563 53 21276.706594 93.911843 41.428667 Friday 1295 25583256 113480 57863 49 19755.410038 87.629343 44.681853 Saturday 519 12515415 56660 25991 19 24114.479768 109.171483 50.078998
-- Создание временной таблицы
create table tmp_H
(
ID int not null, -- ID поста
DT varchar(max) not null, -- Время публикации
VC varchar(max) not null, -- Количество просмотров
ST int not null, -- Количество добавлений в избранное
CC int not null -- Количество комментариев
)
-- Загружаем данные во временную таблицу
BULK INSERT tmp_H FROM 'c:\csv\HabrahabrDataParsedDate.txt' WITH (FIELDTERMINATOR = ',', FIRSTROW = 1,ROWTERMINATOR = '0x0a', CODEPAGE='ACP')
-- Удаляем записи с неправильным временем (около 3,5% записей)
delete from tmp_H where len(dt) > 16
-- Ставим 0 как количество просмотров для тех записей, для которых такого показателя нет
update tmp_H set VC = 0 where VC = '(null)'
-- Собственно выборка. 2013 год, записи с указанием количества просмотров (впрочем все записи за 2013 год имеют данный показатель)
with tmp (ID, DT, VC, ST, CC)
as (select ID, CONVERT(datetime, SUBSTRING(DT, 7, LEN(DT) - 6), 104) as DT, convert(int, VC) AS VC, ST, CC from tmp_H)
select
datename(dw,DT) as [DayOfWeek],
count(*) as [PostCount],
sum(VC) as [ViewCount],
sum(ST) as [StarCount],
sum(CC) as [CommentCount],
count(*) / count(distinct DT) as [AvgPostCountByDay],
sum(VC * 1.0) / count(*) as [AvgViewCount],
sum(ST * 1.0) / count(*) as [AvgStarCount],
sum(CC * 1.0) / count(*) as [AvgCommentCount]
from tmp
where 1=1
and DT between '01-01-2013' and '01-01-2014' -- 2013 год
and VC != 0 -- Есть просмотры
group by datepart(dw,DT),datename(dw,DT)
order by datepart(dw,DT)
8+ в 1: как я хотел привлечь внимание