MySQL - Разделение данных в 1 столбце на 3 отдельных столбца для отчета - PullRequest
1 голос
/ 06 мая 2020

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

Мы хотим иметь 3 разных столбца: bhns, hns, chns, отображаются в отчете, и необходимо изменить этот запрос, чтобы отображать разные столбцы. Итак, разделите 1 столбец (customer_edits) на 3 столбца на странице.

SELECT
  count( `database2`.`sales_edits`.`id` ) AS `customer_edits`,
  `database2`.`sales_edits`.`rep` AS `rep`

FROM
  `database2`.`sales_edits` 
WHERE
  ((
      cast( `database2`.`sales_edits`.`date` AS date ) = curdate()) 
    AND ((
        `database2`.`sales_edits`.`page` = 'chs' 
        ) 
      OR ( `database2`.`sales_edits`.`page` = 'chns' ) 
    OR ( `database2`.`sales_edits`.`page` = 'bhns' ))) 
GROUP BY
  `database2`.`sales_edits`.`rep` 

таблица sales_edit:

sales_edit table

1 Ответ

0 голосов
/ 06 мая 2020

Похоже, вам нужна условная агрегация:

select
    rep,
    sum(page = 'chs')  customer_edits_chs,
    sum(page = 'chns') customer_edits_chns,
    sum(page = 'bhns') customer_edits_bhns
from database2.sales_edits 
where date = current_date and page in ('chs', 'chns', 'bhns')
group by rep

Исходный код выглядит более сложным, так как ему нужно:

  • нет необходимости ставить перед всеми столбцами префикс схема и имя таблицы - одна таблица в любом случае вступает в игру (и если у вас их несколько, вы должны использовать псевдонимы таблиц, чтобы сократить код)

  • преобразование даты кажется ненужным ; MySQL с радостью понимает любую строку в формате 'yyyy-mm-dd' как дату

  • повторяющиеся условия or могут быть сокращены с помощью in

  • , вероятно, нет необходимости заключать все идентификаторы в обратные кавычки, пока они не содержат специальных символов

...