1

参加したいクエリが2つあります

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

doctor_idがNULLの場合を除いて、は常に1を返します。count(a.doctor_id)これは、その列でグループ化しているためです。各ニックネームの医師の数を取得するのですか、それとも各医師のニックネームの数を取得するのですか?

2番目のクエリのサブクエリもあまり意味がありません。

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 に答える