好吧,这个问题已经困扰了我大约 3 个小时,我无法弄清楚。
我这里有三个不同的 table 。表 1 包含有关与作业相关的附件的信息。表二包含实际的工作信息。表三基本上只是外观信息。
partsdata
+-------+--------+------------+
| jobid | partid | categoryId |
+-------+--------+------------+
| 0 | 2 | 1 |
| 2 | 2 | 1 |
| 2 | 4 | 1 |
| 2 | 8 | 1 |
| 2 | 33 | 6 |
| 2 | 12 | 3 |
| 3 | 1 | 1 |
| 3 | 1 | 1 |
| 3 | 5 | 3 |
| 4 | 7 | 1 |
| 4 | 12 | 3 |
| 5 | 27 | 1 |
| 8 | 2 | 1 |
+-------+--------+------------+
quotes
+-------+----------------------------+
| jobid | customername |
+-------+----------------------------+
| 0 | Mac |
| 2 | Ray & Angie |
| 3 | Jim |
| 5 | Ray & Angie |
| 6 | Susan |
| 8 | Mac |
| 9 | Dick |
+-------+----------------------------+
category
+-------+-------------------+
| catId | category |
+-------+-------------------+
| 1 | category_1 |
| 2 | category_2 |
| 3 | category_3 |
| 4 | category_4 |
+-------+-------------------+
我需要是一个查询,它将输出一个按客户名称分组的列表,其中列出了客户在数据库中每个类别的报价数量。 IE。查询数据库,发现Mac有两个作业,这些作业中的所有部分都在catid1中,这意味着他有两个属于category_1的作业。 Ray 和 Angie 有 2 份工作,但他们的角色属于两个不同的类别。这意味着 Ray 和 Angie 在类别_1 中有 2 份工作,在类别_3 中有 1 份工作。
+--------------+-------------+---------+
| customername | category | numJobs |
+--------------+-------------+---------+
| Mac | category_1 | 2 |
| Ray & Angie | category_1 | 2 |
| Ray & Angie | category_3 | 1 |
| Jim | category_1 | 1 |
| Jim | category_3 | 1 |
+--------------+-------------+---------+
到目前为止,我尝试过的是从零件表中提取数据,然后加入其他表,然后使用 COUNT 使用这样的查询来获取 numJobs...
SELECT DISTINCT q.customername, COUNT(*) AS numOrders, c.category AS category
FROM partsdata p
INNER JOIN category c ON p.category = c.catid
INNER JOIN quotes q ON p.jobid = q.jobID
GROUP BY q.customername, c.category
但这当然给了我错误的计数。我完全不知道如何得到这个。我觉得我只是错过了一些愚蠢的事情。帮忙?
最佳答案
只需调整 COUNT()
即可计算不同的 jobID。这样,重复的partID就不会影响计数的行数。
SELECT q.customername, COUNT(DISTINCT p.jobid) AS numOrders, c.category AS category
FROM partsdata p
INNER JOIN category c ON p.categoryId = c.catid
INNER JOIN quotes q ON p.jobid = q.jobID
GROUP BY q.customername, c.category;
+--------------+-----------+------------+
| customername | numOrders | category |
+--------------+-----------+------------+
| Jim | 1 | category_1 |
| Jim | 1 | category_3 |
| Mac | 2 | category_1 |
| Ray & Angie | 2 | category_1 |
| Ray & Angie | 1 | category_3 |
| Ray & Angie | 1 | category_6 |
+--------------+-----------+------------+
关于php - MySQL COUNT 跨多个表的不同行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336873/