検索

ホームページ  >  に質問  >  本文

Mysql 1 対多 スレーブ テーブルで複数条件と複数の統計を実行する方法

メインテーブルユーザーテーブル
ID名電話番号(関連フィールド)

From テーブル通話記録 table
id ​​電話 (関連フィールド) ot_phone 時間タイプ (着信および発信通話) input_time

連絡先テーブル
id ​​c_id電話

会社テーブル
c_id名

各人の電話番号の数え方 (リスト制限 0、10)
電話がかかってきた回数
電話をかけられた回数
市内番号は何回か
外国番号は何回ありますか
合計着信通話時間
合計発信通話時間
一致する会社の数 (主に、連絡先テーブル内の電話機は同じ電話機を持ちますが、対応しているため、これが主な理由です)別の会社への場合、左側の join sum() データは不正確です)
マッチング会社の通話時間
......

主な問題は、連絡先テーブル内の電話が一意ではなく、重複した電話番号があることです。たとえば、ある人が 2 つの会社で働いている場合、
左結合合計の後に、会社には重複したデータが存在し、データは不正確です

実際には、連絡先のテーブル電話を重複排除して他のテーブルと結合することも考えましたが、これは非常に遅く、50 秒かかります。

連絡先のテーブルは 50,000 元以上です

これは1つのSQLでは解決できないようです

最終結果

は、
id ​​name Telephone in_num (着信コールの数) out_num (発信コールの数) local_phone_num (市内番号) .......
23 '小白 に似ています。 ' 15523232323 45 120 30 ....
24 '小红' 18823232323 70 93 41 ...

世界只因有你世界只因有你2783日前858

全員に返信(3)返信します

  • 高洛峰

    高洛峰2017-05-18 10:56:32

    まず、国内番号と外国番号を定義するフィールドが必要です。次に、通話記録なしで番号を表示する必要があるかどうかを確認します。必要に応じて、次の SQL を左結合に変更し、その値に対して null 判定を実行します。そうでない場合は、直接使用できます

    リーリー

    さらに、表 b の通話時間が統計的な int 型の分ではない場合は、変換する必要がある場合があります

    返事
    0
  • PHP中文网

    PHP中文网2017-05-18 10:56:32

    次の SQL を実行すると、次の結果が得られます: (質問で期待される結果は少し不明確です)

    ID 名前 電話 タイプ 数える
    23 シャオバイ 15523232323 14
    23 シャオバイ 15523232323 アウト 287

    SQL

    リーリー

    返事
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-18 10:56:32

    外部結合クエリを使用できます

    返事
    0
  • キャンセル返事