1

我有两个要加入的查询

SELECT b.nickname,count(a.doctor_id) 
FROM a_table a 
join b_table b 
on (a.doctor_id=b.id_user) 
GROUP BY a.doctor_id

SELECT   doctor_id, SUM(medicine) medicine, SUM(radiology) radiology,sum(lab) lab, sum(act) act
FROM     (
  SELECT   MAX(doctor_id) doctor_id,
           SUM(IF(pm='F', cost, NULL)) medicine,
           SUM(IF(pm='R', cost, NULL)) radiology,
           SUM(IF(pm='L', cost, NULL)) lab,
           SUM(IF(pm='P', cost, NULL)) act
  FROM     c_table
  GROUP BY Trans_No
) t
GROUP BY doctor_id

我已经尝试加入

SELECT   b.nickname, count(a.doctor_id), SUM(medicine) medicine, SUM(radiology) radiology,sum(lab) lab, sum(act) act
FROM     (
  SELECT   MAX(doctor_id) doctor_id,
           SUM(IF(pm='F', cost, NULL)) medicine,
           SUM(IF(pm='R', cost, NULL)) radiology,
           SUM(IF(pm='L', cost, NULL)) lab,
           SUM(IF(pm='P', cost, NULL)) act
  FROM     c_table
  GROUP BY Trans_No
) t
join a_table a on (a.doctor_id=t.doctor_id)
join b_table b on (a.doctor_id=b.id_user)
GROUP BY a.doctor_id

所有这些表都有大量数据(超过 200 万条数据),我已经设置了我的 CommandTimeout = 600 但它仍然没有响应

我是不是加入错了,还是只是对很多数据?我该怎么做才能得到结果?

4

1 回答 1

0

这不是答案,但评论太长了。

您的查询没有意义。我认为你需要重新审视这个问题。第一个查询:

SELECT b.nickname,count(a.doctor_id) 
FROM a_table a 
join b_table b 
on (a.doctor_id=b.id_user) 
GROUP BY a.doctor_id

总是返回 1 count(a.doctor_id),除非医生 ID 为 NULL。这是因为您正在对该列进行分组。您是要获取每个昵称的医生数还是每个医生的昵称数?

第二个查询中的子查询也没有多大意义:

SELECT   MAX(doctor_id) doctor_id,
         SUM(IF(pm='F', cost, NULL)) medicine,
         SUM(IF(pm='R', cost, NULL)) radiology,
         SUM(IF(pm='L', cost, NULL)) lab,
         SUM(IF(pm='P', cost, NULL)) act
FROM     c_table
GROUP BY Trans_No

为什么要对 trans_no 进行分组?您为什么不将其用作索引?

也许你应该写另一个问题,解释你想要完成的事情。

于 2012-12-19T15:00:55.273 回答