mysql - SQL - LEFT JOIN,但我希望 COUNT(*) 只计算连接的 INNER 部分的结果
问题描述
我想显示每个客户的购买次数。如果他们进行了 0 次购买,我想显示 0。
期望的输出:
-------------------------------------
| customer_name | number_of_purchases |
-------------------------------------
| Marg | 0 |
| Ben | 1 |
| Phil | 4 |
| Steve | 0 |
-------------------------------------
客户表:
-----------------------------
| customer_id | customer_name |
-----------------------------
| 1 | Marg |
| 2 | Ben |
| 3 | Phil |
| 4 | Steve |
-----------------------------
采购表:
--------------------------------------------------
| purchase_id | customer_id | purchase_description |
--------------------------------------------------
| 1 | 2 | 500 Reams |
| 2 | 3 | 6 Toners |
| 3 | 3 | 20 Staplers |
| 4 | 3 | 2 Copiers |
| 5 | 3 | 9 Name Plaques |
--------------------------------------------------
我目前的查询如下:
SELECT customer_name, COUNT(*) AS number_of_purchaes
FROM customer
LEFT JOIN purchases ON customer.customer_id = purchases.customer_id
GROUP BY customer.customer_id
但是,由于它是LEFT JOIN
,因此查询会为没有购买的客户生成行,这使他们成为COUNT(*)
. 换句话说,购买了 0 次的客户会显示为购买了 1 次,如下所示:
左连接输出:
-------------------------------------
| customer_name | number_of_purchases |
-------------------------------------
| Marg | 1 |
| Ben | 1 |
| Phil | 4 |
| Steve | 1 |
-------------------------------------
我也尝试过INNER JOIN
,但这导致购买 0 的客户根本没有显示:
内连接输出:
-------------------------------------
| customer_name | number_of_purchases |
-------------------------------------
| Ben | 1 |
| Phil | 4 |
-------------------------------------
如何在显示购买量为 0 的客户的情况下实现我的期望输出?
解决方案
而不是count(*)
使用count(purchase_id)
SELECT customer_name, COUNT(purchase_id) AS number_of_purchaes
FROM customer
LEFT JOIN purchases ON customer.customer_id = purchases.customer_id
GROUP BY customer_id,customer_name
推荐阅读
- c# - TemplateField ItemTemplate 仅在回发后显示
- php - 使用 CI 中的加载数据 InFile 上传 500000 条记录,但有时并非所有记录都插入
- javascript - 如何使用预填充数据验证文本区域?
- android - 当应用程序在后台时在推送通知中获取操作
- keen-io - .net 的敏锐 io 限制子句
- php - 处理引入类型提示导致的 PHP 致命类型错误
- php - 当他访问本地主机 URL“proj.test”时,将用户重定向到 HTTPS URL 而不是 HTTP
- jquery - 通过jquery调用表时替换字符串不起作用
- ubuntu - 为什么proftpd只允许下载而不允许上传
- mysql - 如何在 MySQL 中清理带有特殊字符的数据