Как сгруппировать строки в новую таблицу? - PullRequest
0 голосов
/ 07 ноября 2019

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

Я пробовал этот код

CREATE TABLE new_table AS
SELECT customer_id,
(COUNT(invoice_send_method WHERE invoice_send_method='Fax' GRPUP BY(purchase_date || '_' || item_id))),
(COUNT(invoice_send_method WHERE invoice_send_method='Mail' GRPUP BY(purchase_date || '_' || item_id))),
(COUNT(invoice_send_method WHERE invoice_send_method='Email' GRPUP BY(purchase_date || '_' || item_id)))
FROM my_table;

Но он возвращает синтаксическую ошибку после первогоэкземпляр invoice_send_method (до WHERE).

Чтобы считать одним экземпляром метода доставки счетов, я создал правило, что это должна быть уникальная комбинация purchase_date и item_id.

Current Table

Desired Table

Есть ли лучший способ сделать это? Кажется, что я не могу ввести операторы WHERE или GROUP BY в COUNT, но я не знаю, как еще это сделать, все еще проверяя все методы доставки счетов.

Я использую MySQL Workbench.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Ваш запрос синтаксически неверен. Используйте это:

CREATE TABLE new_table AS
SELECT 
  t.customer_id,
  SUM(t.invoice_send_method = 'Fax') fax_count,
  SUM(t.invoice_send_method = 'Mail') mail_count,
  SUM(t.invoice_send_method = 'Email') email_count
FROM (SELECT DISTINCT * FROM my_table) AS t
GROUP BY t.customer_id; 

См. Демоверсию . Результаты:

| customer_id | fax_count | email_count | mail_count |
| ----------- | --------- | ----------- | ---------- |
| 10863865    | 0         | 1           | 0          |
| 12010467    | 1         | 0           | 0          |
| 2771929     | 0         | 0           | 3          |
| 5317588     | 0         | 0           | 1          |
| 7484618     | 0         | 3           | 0          |
| 7924567     | 1         | 0           | 0          |
| 9320463     | 1         | 0           | 0          |
0 голосов
/ 07 ноября 2019

Вы можете попробовать использовать ORDER BY вместо GROUP BY:

CREATE TABLE new_table AS
SELECT customer_id, purchase_date, item_id,
COUNT(invoice_send_method WHERE invoice_send_method='Fax') as count_fax, 
COUNT(invoice_send_method WHERE invoice_send_method='Mail') as count_mail,
COUNT(invoice_send_method WHERE invoice_send_method='Email') as count_email,
FROM my_table
ORDER BY purchase_date, item_id;

Вы можете удалить purchase_date и item_id из SELECT, если вы не хотите их видеть, просто проще проверить это,способ.

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