2012-07-10 109 views
-1

我有两张桌子。包含患者和医院的字段的“tbl_a”以及咨询的“tbl_b”。 现在我的问题是只计算在“tbl_b”中有4条记录的患者,以便如果患者在“tbl_b”中有4条记录,则它计为1. 我希望这个结果只能使用mysql coz和i需要这个在事件调度器中运行。 总之,我想统计每个医院有4次咨询的所有患者。有人可以帮助我吗?如何在mysql中统计所有行结果为1?

+1

什么是tbl_b领域?患者如何与咨询联系起来?此外,您是否想要检索那些有***四次咨询或只有四次或更多次咨询的患者? – 2012-07-10 07:33:06

+0

与tbl_a isr相同 – avien 2012-07-10 07:35:14

+1

http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work – Shiham 2012-07-10 07:49:32

回答

0

试试这个::

Select *, count(1) 
from table_a a 
inner join table_b b 
inner join on (a.patient_id=b.patient_id) 
group by b.patient_id having count(1) =4 
+0

什么使用1里面的数字? – avien 2012-07-10 07:41:12

+0

@avien,它只是计算一行的存在,即使该行包含“NULL”值。它与COUNT(*)'相同......所以这只是一个风格偏好问题。 – 2012-07-10 07:44:01

+0

你是否必须做两个内部连接? – avien 2012-07-10 07:45:00

1

使用此解决方案:

SELECT patient 
FROM tbl_b 
GROUP BY patient 
HAVING COUNT(1) >= 4 

更改>==如果你只是想谁拥有患者究竟四项咨询,而不是四个或更多。

也许你想的谁拥有四个或更多的磋商患者计数 ...在这种情况下,你可以只是包装上面SELECT和计数行数:假设表

SELECT COUNT(1) 
FROM 
( 
    SELECT patient 
    FROM tbl_b 
    GROUP BY patient 
    HAVING COUNT(1) >= 4 
) a 
1

患者和咨询的patient_id

SELECT * FROM patients 
JOIN (SELECT IF(COUNT(patient_id) = 4, patient_id, NULL) AS con 
    FROM consultation 
    GROUP BY patient_id) AS con 
     ON con.patient_id = patients.patient_id 
GROUP BY patient_id 

加入了连接表将只能得到数来回回这是4协商和所有其他AR E无效因此加入的情况下条款将导致有记录的患者总数的协商仅4

希望这有助于

0

试试这个

SELECT 
     COUNT(consultation)/4 AS Patient_Number 
FROM 
     tbl_b 

GROUP BY 
     consultation 
HAVING 
     (COUNT(consultation) % 4) = 0 
+0

我假设你有一列“咨询”,否则使用你想要使用的列名。 – Narendra 2012-07-10 08:38:56

相关问题