Select 从两个表中使用左连接计数
Select count with left join counting from both tables
我有以下查询:
select count(*) as `count`, ass.date_assigned as date_assigned
from `buyers` as b
left join `assignments` as ass on (ass.id_buyer = b.id)
我只想用这个来计算总数buyers
。问题是它似乎也在计算所有 assignments
。
我试过按 b.id
和 ass.id_buyer
分组,我试过将 count(*)
更改为 count(b.id)
。
没有任何效果。我该如何解决这个问题,让它只计算 buyers
?
使用右外连接:
select count(*) as `count`, ass.date_assigned as date_assigned from `buyers` as b right outer join `assignments` as ass on (ass.id_buyer = b.id)
使用COUNT(DISTINCT)
:
SELECT COUNT(DISTINCT b.id) AS count, MAX(a.date_assigned) AS last_date_assigned
FROM buyers AS b
INNER JOIN assignments AS a ON a.id_buyer = b.id
我也从 LEFT JOIN
更改为 INNER JOIN
,这样它只会计算有任务的买家(否则为什么要加入 assignments
?)。并使用 MAX(a.date_assigned)
以便它选择一个特定的分配日期,而不仅仅是来自任何分配的随机日期。
我有以下查询:
select count(*) as `count`, ass.date_assigned as date_assigned
from `buyers` as b
left join `assignments` as ass on (ass.id_buyer = b.id)
我只想用这个来计算总数buyers
。问题是它似乎也在计算所有 assignments
。
我试过按 b.id
和 ass.id_buyer
分组,我试过将 count(*)
更改为 count(b.id)
。
没有任何效果。我该如何解决这个问题,让它只计算 buyers
?
使用右外连接:
select count(*) as `count`, ass.date_assigned as date_assigned from `buyers` as b right outer join `assignments` as ass on (ass.id_buyer = b.id)
使用COUNT(DISTINCT)
:
SELECT COUNT(DISTINCT b.id) AS count, MAX(a.date_assigned) AS last_date_assigned
FROM buyers AS b
INNER JOIN assignments AS a ON a.id_buyer = b.id
我也从 LEFT JOIN
更改为 INNER JOIN
,这样它只会计算有任务的买家(否则为什么要加入 assignments
?)。并使用 MAX(a.date_assigned)
以便它选择一个特定的分配日期,而不仅仅是来自任何分配的随机日期。