Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Glory,

Согласен, там есть "сводные отчеты", которые могут сделать гораздо больше, чем просто отобразить гистограмму.
5 сен 14, 16:29    [16541342]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Wlr-l, Опять забыл сказать, что Excel сам не построит, нужен будет человек, который сумеет это сделать.
5 сен 14, 16:30    [16541347]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wlr-l
Wlr-l, Опять забыл сказать, что Excel сам не построит, нужен будет человек, который сумеет это сделать.

Который владеет технологией Drag-and-Drop ?
5 сен 14, 16:33    [16541361]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Glory,

Не только этим. Т.е. Вы полагаете, что умение перетаскивать объекты автоматически подразумевает владение методами математической статистики?

Получается, что домохозяйки могут управлять государством.
5 сен 14, 16:38    [16541387]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wlr-l
Не только этим. Т.е. Вы полагаете, что умение перетаскивать объекты автоматически подразумевает владение методами математической статистики?

Если вы сами добрались до Drag-and-Drop в Excel Pivot, то думаю, что ваших знаний достаточно для построения гистограммы.
Для остальных есть Wizard того же Pivot-а
5 сен 14, 16:43    [16541417]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Glory,

Опять обсуждение не о чем. В любом случае нужны знания и об этом Вы часто пишете. Скорее всего Вы обращаетесь не ко мне, а к ТС. Это нужно ему, а его уже нет...
5 сен 14, 16:51    [16541462]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wlr-l
Опять обсуждение не о чем.

Как и ваше предложение о "построении гистограммы"
5 сен 14, 16:52    [16541470]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Glory,

Говорить неудобно, но мне часто приходится заниматься статистической обработкой, поэтому я знаю не только те программные продукты, о которых здесь уже говорилось. Кроме того есть и "самописные программные продукты".
5 сен 14, 16:57    [16541507]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wlr-l
Glory,

Говорить неудобно, но мне часто приходится заниматься статистической обработкой, поэтому я знаю не только те программные продукты, о которых здесь уже говорилось. Кроме того есть и "самописные программные продукты".

Это не повод в каждой теме начинать решать свою собственную задачу.
5 сен 14, 17:01    [16541541]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Стас0н
Glory, а почему не возможно вывести 10001 столбец? Только из соображений того, что сложночитабельно будет?


Есть ограничение на список полей в SELECT -- 4096, а для большого числа колонок существуете так называется WIDE TABLE -- там до 30000 . Но это не отменяет ограничение по SELECT.


http://msdn.microsoft.com/en-us/library/ms143432.aspx

Я как то раз сталкивался с необходимостью вывести партянку более 25 тыс колонок. Какое-то американские кадровое агенство за каким-то ... захотело такой отчёт. Пришлось делить по вертикали. Несколько SELECT
5 сен 14, 18:00    [16541930]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Стас0н
Member

Откуда:
Сообщений: 106
да, совсем забыл сказать, что это частотное распределение нужно построить за определенную неделю. Время хранится в другой табличке - с полями site_id и time

Насчет того, что распределение может не влезть по числу колонок подумал, и решил, что можно считать частоту не так:
1 - 2 - 3..
А по интервалам: 1-10, 11-20 и т.д. Возможно и интервалы не будут одинаковыми.
+ значения частоты 10001 не будет.

Вы бы не могли помочь написать запрос, который как раз бы выводил значения частот для сайтов с учетом интервалов посещаемости (1-10, 11-20 и т.д)
8 сен 14, 13:03    [16549188]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Стас0н
Member

Откуда:
Сообщений: 106
да, совсем забыл сказать, что это частотное распределение нужно построить за определенную неделю. Время хранится в другой табличке - с полями site_id и time

Насчет того, что распределение может не влезть по числу колонок подумал, и решил, что можно считать частоту не так:
1 - 2 - 3..
А по интервалам: 1-10, 11-20 и т.д. Возможно и интервалы не будут одинаковыми.
+ значения частоты 10001 не будет.

Вы бы не могли помочь написать запрос, который как раз бы выводил значения частот для сайтов с учетом интервалов посещаемости (1-10, 11-20 и т.д)
8 сен 14, 13:03    [16549189]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Glory,
Еще раз, ТС просил решить задачу " распределение частоты посещения пользователей". Вместо того, чтобы подсказать ему решение задачи, Вы увели его в строну ".если... 10 000 раз". На что ТС ответил: "Glory, да, верно". Следовательно, ТС не представляет задачу, которую решает.

_human подсказал: "PIVOT избавит от всех проблем". Я предложил более общий вариант: "case + group by" + как быть с "огромным числом случаев -> использовать диапазоны случаев.

В качестве примера приведу решение построения гистограмм Кена Хендесона из книги "Профессиональное руководство по Transact-SQL" (вспомним родной 2000):

USE pubs
SELECT PayTerms=isnull(s.payterms,'NA'),
       "Less than 10"=COUNT(CASE WHEN s.sales >= 0 AND s.sales <10 THEN 1 ELSE NULL END),
       "10-19"       =COUNT(CASE WHEN s.sales >=10 AND s.sales <20 THEN 1 ELSE NULL END), 
       "20-29"       =COUNT(CASE WHEN s.sales >=20 AND s.sales <30 THEN 1 ELSE NULL END), 
       "30-39"       =COUNT(CASE WHEN s.sales >=30 AND s.sales <40 THEN 1 ELSE NULL END),
       "40-49"       =COUNT(CASE WHEN s.sales >=40 AND s.sales <50 THEN 1 ELSE NULL END),
       "50 or more"  =COUNT(CASE WHEN s.sales >=50                 THEN 1 ELSE NULL END)
  FROM (SELECT t.title_id, s.payterms, sales=ISNULL(SUM(s.qty),0)
          FROM            titles t
          LEFT OUTER JOIN sales  s ON (t.title_id=s.title_id)
         GROUP BY t.title_id, payterms
       ) s
 GROUP BY s.payterms


Поэтому считаю, что я решаю не свою собственную задачу, а задачу ТС, а Вы выясняли второстепенные детали.
8 сен 14, 13:04    [16549193]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Стас0н,

Решение приведено, могут быть одинаковыми или разными, период определяется предикатом в WHERE.
8 сен 14, 13:09    [16549237]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Стас0н
Member

Откуда:
Сообщений: 106
Проблема в том, что, например, в последнем запрос слишком много вречаются одни и теже константы:
"10-19" =COUNT(CASE WHEN s.sales >=10 AND s.sales <20 THEN 1 ELSE NULL END),

Т.е. если нужно будет изменить интервалы, то придется довольно много переписывать.

Хочется иметь что-то в этом роде [url=]https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB4QFjAA&url=http://www.xaprb.com/blog/2006/06/10/how-to-find-data-distributions-with-sql/&ei=HnINVIjZMOq8ygPW7YGYCg&usg=AFQjCNF0lP8k4qOxl4Q4bwNGb94PbiN67w&bvm=bv.74649129,d.bGQ&cad=rja[/url]
8 сен 14, 13:13    [16549277]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Стас0н,
Я привет пример решения Вашей задачи. Если диапазоны меняются, то храните их в таблице. Принцип построения гистограммы не изменится.

Повторю еще раз " частотное распределение" - это не кол-во раз! Это, скорее всего, отношение кол-во раз к общему числу раз.
8 сен 14, 13:26    [16549390]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Стас0н
Member

Откуда:
Сообщений: 106
не хранить диапозоны частот в отдельной таблице - можно считать одним из условий

Частотное распределение - распределение кол-ва заходов пользователей (visitor_id) на сайт за определенный промежуток времени

Нормировка на общее число заходов не нужна
8 сен 14, 13:31    [16549456]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Стас0н,
Пусть будет так с частотой.
Что-то у Вас много условий. Золотое правило механики: "Нельзя выиграть в силе и расстоянии". Придется разработать код, для формирования запроса для заданных условий.
8 сен 14, 13:37    [16549491]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Стас0н
Member

Откуда:
Сообщений: 106
я вот что-то не соображу как для каждого site_id посчитать частоту захода пользователей. Т.е. нужно как-то учитывать посещаемость уникального visitor_id..
8 сен 14, 13:49    [16549628]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Glory, Специально для Вас из статьи, на которую сослался ТС:

Distribution
range total num
1-1 10038 10038
2-10 4032 1012
11-50 300 123
51-100 72 1
1000-9999 3040 2

Видим, что используются диапазоны и они неравномерные.


Стас0н, в этой статье диапазоны как раз хранятся в отдельной таблице ranges, так что у Вас достаточно примеров, чтобы решить именно Вашу задачу.
8 сен 14, 14:49    [16550061]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wlr-l
Glory,
Еще раз, ТС просил решить задачу " распределение частоты посещения пользователей".

Офигеть.
Здесь решают задачи по MSSQL, который, как известно, осуществялет выборки данных.
Задача ТС-а была тривиальным перекрестным запросом, а не каким то там "распределением"
И у перектрестного запроса есть ограничения.
Если вы не в состоянии понять задачу, то лучше уж молчать, чем предлагать разную фигню и

Wlr-l
Glory, Специально для Вас из статьи, на которую сослался ТС:

Distribution
range total num
1-1 10038 10038
2-10 4032 1012
11-50 300 123
51-100 72 1
1000-9999 3040 2

Видим, что используются диапазоны и они неравномерные.

И где тут 10001 столбец ?
8 сен 14, 15:29    [16550364]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Стас0н, Чуть-чуть доработанный для Вашего случая запрос из статьи, на которую Вы ссылаетесь:

with item as ( 
 select * from (values (  1,    10),
                       (  2,    20),
                       (  3,    30),
                       ( 10,   100),
                       ( 20,   200),
                       ( 40,   400),
                       ( 102, 1020)
               ) as T (site_id, visitor_id)
)

, ranges as (
 select * from (values (   1,    1),
                       (   2,   10),
                       (  11,   50),
                       (  51,  100),
                       ( 101,  200),
                       ( 201,  500),
                       ( 501, 1000),
                       (1000, 9999)
               ) as T (s,e)
)

select  concat(s, '-', e) as range, isnull(sum(visitor_id),0) as total, count(x.visitor_id) as num
  from       ranges  r
  left join  item    x on x.visitor_id between r.s and r.e
 group by r.s, r.e;

Результат:
range    total num
1-1 0 0
2-10 10 1
11-50 50 2
51-100 100 1
101-200 200 1
201-500 400 1
501-1000 0 0
1000-9999 1020 1

В качестве упражнения получите таблицу item из Вашей таблицы im. Как видите ничего страшного в таблице ranges нет! Да и конечному пользователь необязательно знать как именно будут получены, необходимые данные.
8 сен 14, 15:37    [16550407]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Glory, "1000 - 9999" заменить на "больше или равно 1000".

"MSSQL, который, как известно, осуществялет выборки данных". Ну ка, MSSQL! Выбери мне данные! Хочешь, можешь воспользоваться перекрестным запросом! Отлично Glory!!!
8 сен 14, 15:43    [16550444]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wlr-l
Glory, "1000 - 9999" заменить на "больше или равно 1000".

Вы идиот, не отличающий поля от записей.

Wlr-l
"MSSQL, который, как известно, осуществялет выборки данных". Ну ка, MSSQL! Выбери мне данные! Хочешь, можешь воспользоваться перекрестным запросом! Отлично Glory!!!

Нет - Ну ка, MSSQL! Сделай мне распределение
8 сен 14, 15:45    [16550455]     Ответить | Цитировать Сообщить модератору
 Re: Получить распределение  [new]
Wlr-l
Member

Откуда:
Сообщений: 639
Glory, Да я идиот, раз у Вас нет аргументов! Надеюсь, Ваше самолюбие удовлетворено!
8 сен 14, 15:47    [16550471]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить