我的参与者有多个订单。过去,我可以很容易地找到订单的计数,但必须使用联接来计算过去的参与者。我使用的代码没有给我正确的数字。代码是:
select count(distinct o.participant_id)
from dbaq.participant p, dbaq.orders o
where o.participant_id=p.participant_id and
(p.water_staff=1) and p.active = '1' and
date_part('year', o.order_date) = 2018;
我弄清楚了为什么这不起作用...当我看着过去的每个年份时,活跃参与者的数量会降低……因为他们要离开并且不再活跃。我认为没有一种方法可以跟踪谁活跃。不过,感谢您的意见 - 下面的很棒建议。
我想您想在今年找到有效订单的参与者人数。我对吗?如果是,您可以尝试
SELECT o.participant_id,
COUNT(*)
FROM dbaq.participant p,
dbaq.orders o
WHERE o.participant_id = p.participant_id
AND p.water_staff = 1
AND p.active = '1'
AND extract(YEAR FROM o.order_date) = '2018'
group by o.participant_id;
尝试以下:
SELECT
COUNT(DISTINCT o.participant_id)
FROM
dbaq.orders o
JOIN
dbaq.participant p
ON
o.participant_id = p.participant_id
WHERE
p.water_staff = 1
AND
p.active = '1'
AND
DATE_PART('year', o.order_date) = 2018;