Если у меня MySQL таблица выглядит примерно так:
название страницы действия компании ------------------------------- Компания А ПРИНТ 3 Компания А ПРИНТ 2 Компания А ПРИНТ 3 Компания B EMAIL Компания Б ПРИНТ 2 Компания Б ПРИНТ 2 Компания Б ПРИНТ 1 Компания А ПРИНТ 3
Можно ли выполнить запрос MySQL, чтобы получить вывод, как это:
название компании EMAIL PRINT 1 страница PRINT 2 страницы PRINT 3 страницы -------------------------------------------------- ----------- CompanyA 0 0 1 3 CompanyB 1 1 2 0
Идея заключается в том, что pagecount
может варьироваться, поэтому количество выходных столбцов должно отражать это: один столбец для каждой пары action
/, pagecount
а затем число попаданий на company_name
. Я не уверен, что это называется сводной таблицей, но кто-то предложил это?
Ответы:
В основном это сводная таблица.
Хороший учебник о том, как этого добиться, можно найти здесь: http://www.artfulsoftware.com/infotree/qrytip.php?id=78.
Я советую прочитать этот пост и адаптировать это решение к вашим потребностям.
Обновить
После того, как ссылка выше в настоящее время больше не доступна, я чувствую себя обязанным предоставить некоторую дополнительную информацию для всех вас, ищущих ответы на MySQL здесь. В нем действительно было огромное количество информации, и я не буду помещать все оттуда сюда (даже больше, так как я просто не хочу копировать их обширные знания), но я дам несколько советов о том, как справиться с Pivot Таблицы SQL путь, как правило, с примером из peku, который задал вопрос в первую очередь.
Возможно ссылка скоро вернется, я буду следить за этим.
Способ работы с электронными таблицами ...
Многие люди просто используют такой инструмент, как MSExcel, OpenOffice или другие инструменты для работы с электронными таблицами. Это правильное решение, просто скопируйте данные туда и используйте инструменты, которые предлагает GUI, чтобы решить эту проблему.
Но ... это был не вопрос, и это может даже привести к некоторым недостаткам, таким как, как поместить данные в электронную таблицу, проблематичное масштабирование и так далее.
SQL путь ...
Учитывая, что его таблица выглядит примерно так:
Теперь посмотрите на его / ее желаемую таблицу:
Строки (
EMAIL
,PRINT x pages
) напоминают условия. Основная группировка поcompany_name
.Для того, чтобы установить условия, достаточно кричать об использовании
CASE
-statement. Для того , чтобы сгруппировать по чему - то, ну, использование ...GROUP BY
.Базовый SQL, обеспечивающий эту опору, может выглядеть примерно так:
Это должно обеспечить желаемый результат очень быстро. Основным недостатком этого подхода является то, что чем больше строк в сводной таблице требуется, тем больше условий необходимо определить в операторе SQL.
С этим тоже можно бороться, поэтому люди склонны использовать готовые операторы, процедуры, счетчики и тому подобное.
Некоторые дополнительные ссылки на эту тему:
источник
Мое решение в T-SQL без каких-либо опорных точек:
источник
SUM()
можете работать только с числовыми данными, если вам нужно использовать сводные строки, которые вам придется использоватьMAX()
SUM(CASE WHEN (action='PRINT' AND pagecount=1) THEN 1 ELSE 0 END)
, вы можете просто сделать,SUM(action='PRINT' AND pagecount=1)
так как условие будет преобразовано,1
когда истинно и0
когда ложноДля MySQL вы можете напрямую поставить условия в
SUM()
функцию, и она будет оценена как логическая0
или,1
таким образом, вы можете рассчитывать количество на основе ваших критериев без использованияIF/CASE
операторов.DEMO
источник
crosstab()
функцию.Для динамического поворота используйте
GROUP_CONCAT
сCONCAT
. Функция GROUP_CONCAT объединяет строки из группы в одну строку с различными параметрами.ДЕМО ЗДЕСЬ
источник
Версия стандартного SQL с использованием логической логики :
SQL Fiddle.
Как?
TRUE OR NULL
доходностьTRUE
.FALSE OR NULL
доходностьNULL
.NULL OR NULL
доходностьNULL
.И
COUNT
только считает ненулевые значения. Вуаля.источник
Правильный ответ:
источник
other_value
таблицы?SET
запрос на увеличение значения по умолчанию, которое ограничено 1024 для GROUP_CONCAT после 1024 GROUP_CONCAT просто обрезает строку без ошибки, означая, что могут произойти непредвиденные результаты ..Существует инструмент под названием MySQL Pivot Table Generator, который может помочь вам создать сводную таблицу на основе веб-интерфейса, которую вы сможете позже экспортировать в Excel (если хотите). это может работать, если ваши данные находятся в одной таблице или в нескольких таблицах.
Все, что вам нужно сделать, это указать источник данных для столбцов (он поддерживает динамические столбцы), строки, значения в теле таблицы и отношения таблицы (если они есть)
Домашняя страница этого инструмента http://mysqlpivottable.net
источник
источник