Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 4 5 вперед Ctrl→ все |
Wlr-l Member Откуда: Сообщений: 523 |
Glory, Согласен, там есть "сводные отчеты", которые могут сделать гораздо больше, чем просто отобразить гистограмму. |
5 сен 14, 16:29 [16541342] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Wlr-l, Опять забыл сказать, что Excel сам не построит, нужен будет человек, который сумеет это сделать. |
5 сен 14, 16:30 [16541347] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Который владеет технологией Drag-and-Drop ? |
||
5 сен 14, 16:33 [16541361] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Glory, Не только этим. Т.е. Вы полагаете, что умение перетаскивать объекты автоматически подразумевает владение методами математической статистики? Получается, что домохозяйки могут управлять государством. |
5 сен 14, 16:38 [16541387] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Если вы сами добрались до Drag-and-Drop в Excel Pivot, то думаю, что ваших знаний достаточно для построения гистограммы. Для остальных есть Wizard того же Pivot-а |
||
5 сен 14, 16:43 [16541417] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Glory, Опять обсуждение не о чем. В любом случае нужны знания и об этом Вы часто пишете. Скорее всего Вы обращаетесь не ко мне, а к ТС. Это нужно ему, а его уже нет... |
5 сен 14, 16:51 [16541462] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Как и ваше предложение о "построении гистограммы" |
||
5 сен 14, 16:52 [16541470] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Glory, Говорить неудобно, но мне часто приходится заниматься статистической обработкой, поэтому я знаю не только те программные продукты, о которых здесь уже говорилось. Кроме того есть и "самописные программные продукты". |
5 сен 14, 16:57 [16541507] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Это не повод в каждой теме начинать решать свою собственную задачу. |
||
5 сен 14, 17:01 [16541541] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Есть ограничение на список полей в SELECT -- 4096, а для большого числа колонок существуете так называется WIDE TABLE -- там до 30000 . Но это не отменяет ограничение по SELECT. http://msdn.microsoft.com/en-us/library/ms143432.aspx Я как то раз сталкивался с необходимостью вывести партянку более 25 тыс колонок. Какое-то американские кадровое агенство за каким-то ... захотело такой отчёт. Пришлось делить по вертикали. Несколько SELECT |
||
5 сен 14, 18:00 [16541930] Ответить | Цитировать Сообщить модератору |
Стас0н Member Откуда: Сообщений: 106 |
да, совсем забыл сказать, что это частотное распределение нужно построить за определенную неделю. Время хранится в другой табличке - с полями site_id и time Насчет того, что распределение может не влезть по числу колонок подумал, и решил, что можно считать частоту не так: 1 - 2 - 3.. А по интервалам: 1-10, 11-20 и т.д. Возможно и интервалы не будут одинаковыми. + значения частоты 10001 не будет. Вы бы не могли помочь написать запрос, который как раз бы выводил значения частот для сайтов с учетом интервалов посещаемости (1-10, 11-20 и т.д) |
8 сен 14, 13:03 [16549188] Ответить | Цитировать Сообщить модератору |
Стас0н Member Откуда: Сообщений: 106 |
да, совсем забыл сказать, что это частотное распределение нужно построить за определенную неделю. Время хранится в другой табличке - с полями site_id и time Насчет того, что распределение может не влезть по числу колонок подумал, и решил, что можно считать частоту не так: 1 - 2 - 3.. А по интервалам: 1-10, 11-20 и т.д. Возможно и интервалы не будут одинаковыми. + значения частоты 10001 не будет. Вы бы не могли помочь написать запрос, который как раз бы выводил значения частот для сайтов с учетом интервалов посещаемости (1-10, 11-20 и т.д) |
8 сен 14, 13:03 [16549189] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
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] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Стас0н, Решение приведено, могут быть одинаковыми или разными, период определяется предикатом в WHERE. |
8 сен 14, 13:09 [16549237] Ответить | Цитировать Сообщить модератору |
Стас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] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Стас0н, Я привет пример решения Вашей задачи. Если диапазоны меняются, то храните их в таблице. Принцип построения гистограммы не изменится. Повторю еще раз " частотное распределение" - это не кол-во раз! Это, скорее всего, отношение кол-во раз к общему числу раз. |
8 сен 14, 13:26 [16549390] Ответить | Цитировать Сообщить модератору |
Стас0н Member Откуда: Сообщений: 106 |
не хранить диапозоны частот в отдельной таблице - можно считать одним из условий Частотное распределение - распределение кол-ва заходов пользователей (visitor_id) на сайт за определенный промежуток времени Нормировка на общее число заходов не нужна |
8 сен 14, 13:31 [16549456] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Стас0н, Пусть будет так с частотой. Что-то у Вас много условий. Золотое правило механики: "Нельзя выиграть в силе и расстоянии". Придется разработать код, для формирования запроса для заданных условий. |
8 сен 14, 13:37 [16549491] Ответить | Цитировать Сообщить модератору |
Стас0н Member Откуда: Сообщений: 106 |
я вот что-то не соображу как для каждого site_id посчитать частоту захода пользователей. Т.е. нужно как-то учитывать посещаемость уникального visitor_id.. |
8 сен 14, 13:49 [16549628] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Glory, Специально для Вас из статьи, на которую сослался ТС:DistributionВидим, что используются диапазоны и они неравномерные. Стас0н, в этой статье диапазоны как раз хранятся в отдельной таблице ranges, так что у Вас достаточно примеров, чтобы решить именно Вашу задачу. |
8 сен 14, 14:49 [16550061] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Офигеть. Здесь решают задачи по MSSQL, который, как известно, осуществялет выборки данных. Задача ТС-а была тривиальным перекрестным запросом, а не каким то там "распределением" И у перектрестного запроса есть ограничения. Если вы не в состоянии понять задачу, то лучше уж молчать, чем предлагать разную фигню и
И где тут 10001 столбец ? |
||||
8 сен 14, 15:29 [16550364] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Стас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 В качестве упражнения получите таблицу item из Вашей таблицы im. Как видите ничего страшного в таблице ranges нет! Да и конечному пользователь необязательно знать как именно будут получены, необходимые данные. |
8 сен 14, 15:37 [16550407] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Glory, "1000 - 9999" заменить на "больше или равно 1000". "MSSQL, который, как известно, осуществялет выборки данных". Ну ка, MSSQL! Выбери мне данные! Хочешь, можешь воспользоваться перекрестным запросом! Отлично Glory!!! |
8 сен 14, 15:43 [16550444] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вы идиот, не отличающий поля от записей.
Нет - Ну ка, MSSQL! Сделай мне распределение |
||||
8 сен 14, 15:45 [16550455] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Glory, Да я идиот, раз у Вас нет аргументов! Надеюсь, Ваше самолюбие удовлетворено! |
8 сен 14, 15:47 [16550471] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 4 5 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |