php - MySQL COUNT 跨多个表的不同行数?

标签 php mysql sql sql-server

好吧,这个问题已经困扰了我大约 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/

相关文章:

php - WordPress mysql 和函数

javascript - 服务器端JS防止SQL注入(inject)的正确方法是什么

PHP MySQL搜索字符编码问题

mysql - 阻止用户访问管理区域

php - 如何将 HTML 页面连接到 MySQL

javascript - 如何转换 Bookshelf.js 上的查询(别名表)

PHP 为每个用户循环 HTML 表

php - PHP函数date()的反义词是什么?

mysql - 无法订购特定 ID

mysql - mysql中如何使用没有join的表