我正在尝试为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分组计数,而不是查询的其余部分。这是可能的还是我需要使用连接?我尝试了几个连接,但无法获得任何工作。任何帮助赞赏。
答案 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';