Лучше всего построить запрос SQL или экстраполировать с другой программой? - PullRequest
2 голосов
/ 08 июня 2011

У меня возникают проблемы при разработке некоторых запросов на лету для наших клиентов, и иногда я спрашиваю себя: «Было бы лучше начать с подмножества данных, которые я ищу, и затем просто импортировать в программу, такую ​​как Excel»и обработать данные соответствующим образом, используя аналогичные функции, такие как сводные таблицы "?.

Один из конкретных примеров, с которыми я борюсь, - это следующий пример:

У меня есть система регистрации участников онлайн.Для простоты предположим, что полученные данные: ID участника, дата регистрации, их реферальный код, их состояние.

Пример таблицы элементов может выглядеть следующим образом:

MemberID  | Date   | Ref    | USState
=====================================
1         | 2011-01-01  | abc   | AL
2         | 2011-01-02  | bcd   | AR
3         | 2011-01-03  | cde   | CA
4         | 2011-02-01  | abc   | TX

и так далее ...

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

Например:

Ref   | 2011-01 | 2011-02 | 2011-03 | 2011-04
==============================================
abc   |   1     |   1     |   0     |  0
bcd   |   1     |   0     |   0     |  0
cde   |   1     |   0     |   0     |  0

Я не знаю, как построить этот тип запроса в MySQL, чтобы быть честным (я думаю, если это возможнодля этого потребуется МНОГО кода, объединений, подзапросов и объединений.

Аналогичным образом, другой пример запроса может быть о том, сколько членов зарегистрировалось в каждом штате по месяцам

USState  | 2011-01 | 2011-02 | 2011-03 | 2011-04
==============================================
AL  |   1     |   0     |   0     |  0
AR  |   1     |   0     |   0     |  0
CA  |   1     |   0     |   0     |  0
TX  |   0     |   1     |   0     |  0

IПредположим, мой вопрос состоит из двух частей:

1) На самом деле лучше всего попытаться создать их с необходимыми данными из графического интерфейса MySQL, такого как Navicat, или просто импортировать все подмножество данных в Excel иработать вперед?

2Если бы я использовал маршрут MySQL, как правильно построить подмножества данных в приведенных ниже примерах (обратите внимание, что запросы могут стать гораздо более сложными, например, «Показать, сколько регистраций поступило за каждый конкретный месяц»).по каждому штату и сгруппированы по каждому агенту (у каждого агента есть 50 возможных строк) "

Большое спасибо за вашу помощь заранее.

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Я работаю над приложением на основе Excel, которое работает с данными многомерных временных рядов, и недавно работал над реализацией предопределенных электронных таблиц сводных таблиц, поэтому я точно знаю, что вы думаете. Я большой сторонник предоставления пользователям инструментов, а не написания отдельных отчетов или целого языка запросов для их использования. Вы можете создавать сводные таблицы на лету, которые подключаются к базе данных, и это не так сложно. У Эндрю Уайтчепела отличный пример здесь . Но вам также потребуется запустить его в Excel или настроить базовую программу Excel VSTO, что довольно легко сделать в Visual Studio 2010. (microsoft.com/vsto)

Другое дело, не думайте, что вы должны создавать смехотворно сложные запросы. Каждое ваше соединение будет тормозить любую реляционную базу данных. Несколько лет назад я обнаружил, что выполнение многошаговых запросов во временные таблицы в большинстве случаев будет намного понятнее, быстрее и проще в написании и поддержке.

2 голосов
/ 08 июня 2011

Я сторонник выполнения подобных запросов на стороне сервера, по крайней мере, для получения только тех данных, которые вам нужны.

Вам следует создать таблицу периодов времени.Он может быть настолько сложным, насколько вы пожелаете, вплоть до нескольких дней.

id   year    month  monthstart  monthend
1    2011    1      1/1/2011    1/31/2011
...

Это дает вам практически безграничную возможность группировать и запрашивать данные всеми видами интересных способов.

Получениеданные для исходного числа рефералов по упомянутому вами запросу за месяц будут довольно простыми ...

select a.Ref, b.year, b.month, count(*) as referralcount
from myTable a
join months b on a.Date between b.monthstart and b.monthend
group by a.Ref, b.year, b.month
order by a.Ref, b.year, b.month

Результирующий набор будет в строках, подобных ref = abc, year = 2011, month = 1, referralcount = 1, а не в столбце для каждого месяца.Я предполагаю, что, поскольку выбор большего объема данных и манипулирование им в Excel был возможным вариантом, изменение макета этих данных не составило бы труда.

Ознакомьтесь с этим предыдущим ответом, в котором более подробно рассмотрено понятие с различными примерами: SQL-запрос для подсчета числа по месяцам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...