具有多个表的SQL查询,可以仅通过计数(*)来应用组?

时间:2013-05-30 10:43:05

标签: mysql

我正在尝试为jobtype'N'列出bookjobs信息,并让发布者信用卡'C'。然后,为先前查询的输出的每一行添加po的总数(来自表pos的采购订单)。您是否可以使用group by仅应用于该计数而不应用于查询的其余部分?我必须使用加入吗?到目前为止,我的尝试都没有成功。 这些是我正在使用的表格:

bookjobs:
+--------+---------+----------+
| job_id | cust_id | jobtype  |
+--------+---------+----------+
publishers:
+---------+------------+------------+
| cust_id | name       | creditcode |
+---------+------------+------------+
pos:
+--------+-------+------------+-----------+
| job_id | po_id | po_date    | vendor_id |
+--------+-------+------------+-----------+

这是我提出的,虽然它是错误的(计数没有分组到job_id):

select b.*, (select count(*) from pos o) as count 
from bookjobs b, publishers p, pos o 
where b.cust_id=p.cust_id 
   and b.job_id=o.job_id 
   and b.jobtype='N' 
   and p.creditcode='C';

我相信我需要按job_id分组计数,而不是查询的其余部分。这是可能的还是我需要使用连接?我尝试了几个连接,但无法获得任何工作。任何帮助赞赏。

2 个答案:

答案 0 :(得分:0)

试试这个sql

select b.*, (select count(*) from pos where job_id=o.job_id) as count 
from bookjobs b, publishers p, pos o 
where b.cust_id=p.cust_id 
   and b.job_id=o.job_id 
   and b.jobtype='N' 
   and p.creditcode='C';

答案 1 :(得分:0)

根据您描述的内容,我假设您的原始查询将返回重复的行。您可以通过预先聚合pos表然后将其加入:

来解决此问题
select b.*, o.cnt
from bookjobs b join
     publishers p
     on b.cust_id = p.cust_id join
     (select job_id, count(*) as cnt
      from pos o 
      group by job_id
     ) o
     on b.job_id = o.job_id
where b.jobtype = 'N' and p.creditcode = 'C';