如何在新表中将行分组在一起?

我正在尝试将多行分组在一起以形成一个新表。我这样做是为了找到每个客户的每种发票交付方式的数量。

我已经尝试过此代码

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的唯一组合。

如何在新表中将行分组在一起?

如何在新表中将行分组在一起?

有更好的方法吗?似乎我无法在COUNT中引入WHERE或GROUP BY语句,但是在仍然检查所有发票传送方式的同时,我不知道该怎么办。

我正在使用MySQL Workbench。

shi443213174 回答:如何在新表中将行分组在一起?

您可以尝试使用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;

如果您不想看到它们,可以从SELECT中删除purchase_date和item_id,这样更容易测试。

,

您的查询在语法上是错误的。
使用这个:

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; 

请参见demo
结果:

| 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          |
本文链接:https://www.f2er.com/3148769.html

大家都在问