sql计数数字的操作不正确



我进行相关查询,计数不正确,当我连接4并连接并添加条件时,它不正确计数,但如果没有第4个连接和条件,它可以正常工作。第一个选项结果=2

SELECT
pxixolog_details.*,
directions.direction,
COUNT(directions.direction)  procent
FROM
pxixolog_details
LEFT JOIN psixologs_direction ON pxixolog_details.id = psixologs_direction.psixolog_id
LEFT JOIN directions ON directions.id = psixologs_direction.direction_id
LEFT JOIN psixologs_weeks ON pxixolog_details.id = psixologs_weeks.psixolog_id
WHERE
directions.direction IN(
'Трудности в отношениях',
'Проблемы со сном',
'Нежелательная агрессия'
) 
AND birthday BETWEEN '1956-04-29' AND '2021-04-29' AND psixologs_weeks.week = '4'

GROUP BY
pxixolog_details.id

第二个不能正常工作。结果=4

SELECT
pxixolog_details.*,
directions.direction,
COUNT(directions.direction)  procent
FROM
pxixolog_details
LEFT JOIN psixologs_direction ON pxixolog_details.id = psixologs_direction.psixolog_id
LEFT JOIN directions ON directions.id = psixologs_direction.direction_id
LEFT JOIN psixologs_weeks ON pxixolog_details.id = psixologs_weeks.psixolog_id
LEFT JOIN psixologs_times ON pxixolog_details.id = psixologs_times.psixolog_id
WHERE
directions.direction IN(
'Трудности в отношениях',
'Проблемы со сном',
'Нежелательная агрессия'
) 
AND birthday BETWEEN '1956-04-29' AND '2021-04-29' AND psixologs_weeks.week = '4'
AND (psixologs_times.time = '09:00' OR psixologs_times.time = '10:00')
GROUP BY
pxixolog_details.id

我做错了什么?

执行4个JOINs时会得到双倍的结果,因为通过新的(第4个(JOIN,前3个JOINs中的每个其他连接记录都允许有2条记录(9:00和10:00(。这可以导致观察到的结果。

检查您的数据,并确保您的第4个JOIN条件产生与其他数据匹配的1:1记录。

最后一个表的psixologs_times为每个psixolog_id匹配多行。

您可以使用查询很容易地看到这一点:

select psixolog_id, count(*)
from psixologs_times
group by psixolog_id
having count(*) > 1;

如何解决这个问题取决于你想做什么。最简单的解决方案是使用count(distinct):

COUNT(DISTINCT directions.direction) as procent

然而,这可能只是掩盖了问题。您可能需要从psixologs_times表中选择一行。或者预先聚合。或者做其他事情。

最新更新