好吧,这个人已经把我困扰了大约3个小时了,我无法理解它。
我这里有三张不同的牌桌。表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 |
+-------+-------------------+
我需要的是一个查询,它将按客户名分组列出客户在每个类别的DB中有多少报价的列表。 I.E.查询在数据库中查看并看到Mac有两个作业,这些作业中的所有部分都在catid1中,这意味着他有两个作业用于category_1。雷&安吉有两份工作,但他们有两个不同类别的部分。这意味着Ray& Angie在category_1中有2个职位,在category_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
但这当然给了我错误的数量。我对如何得到它绝对感到难过。我觉得我只是错过了一些愚蠢的东西。帮助
答案 0 :(得分:0)
只需调整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 |
+--------------+-----------+------------+