Rumah  >  Soal Jawab  >  teks badan

Mysql one-to-many Bagaimana untuk melaksanakan pelbagai keadaan dan statistik berbilang pada jadual hamba

Meja utama Jadual pengguna
nama id telefon (medan berkaitan)

Daripada jadual rekod panggilan meja
telefon id (medan berkaitan) atau jenis masa telefon (panggilan masuk dan keluar) masa_masukan

Borang hubungan
id c_id phone

Jadual syarikat
nama c_id

Cara mengira panggilan telefon semua orang (had senarai 0, 10)
Berapa banyak panggilan masuk
Berapa banyak panggilan keluar
Berapa banyak nombor tempatan
Berapa nombor luar bandar
Berapa jumlah panggilan keluarBerapa banyak jumlah panggilan keluar
Berapa banyak syarikat yang sepadan ( Terutamanya kerana ini, kerana telefon dalam jadual kenalan mempunyai telefon yang sama, tetapi sepadan dengan syarikat yang berbeza, data jumlah penyertaan () kiri tidak tepat)
Padankan masa panggilan syarikat
.... .

Masalah utama ialah: nombor telefon dalam jadual kenalan tidak unik, terdapat nombor telefon pendua, contohnya, seseorang bekerja untuk dua syarikat

Selepas leftjoin sum
Syarikat akan mempunyai data pendua, dan datanya tidak tepat

Sebenarnya, saya terfikir untuk menyahduplikasi telefon meja kenalan dan kemudian menyambungkannya dengan jadual lain, tetapi ini akan menjadi sangat perlahan dan akan mengambil masa 50s

Meja kenalan adalah lebih daripada 50,000 yuan

Nampaknya ini tidak boleh diselesaikan dengan satu sql

Keputusan akhir

serupa dengan
nombor telefon nama id (bilangan panggilan masuk) nombor_luar (bilangan panggilan keluar) nombor_telefon tempatan (nombor tempatan) .......
23 '小白' 15523232323 45 .120 30 ...
24 '小红' 18823232323 70 93 41 ......

世界只因有你世界只因有你2710 hari yang lalu787

membalas semua(3)saya akan balas

  • 高洛峰

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

    Pertama sekali, anda perlu mempunyai medan yang mentakrifkan nombor tempatan dan asing, dan kemudian sama ada anda perlu memaparkan nombor tanpa rekod panggilan Jika perlu, tukar sql berikut kepada gabungan kiri dan lakukan pemprosesan nol pada nilai dalam jadual yang betul Jika tidak, Anda boleh menggunakannya terus

    .
    select 
        id,name,phone,
        sum(case when type='in' then 1 else 0 end) cnt_in,
        sum(case when type='out' then 1 else 0 end) cnt_out,
        sum(case when iflocal='1' then 1 else 0 end) cnt_local,
        sum(case when iflocal='0' then 1 else 0 end) cnt_nonlocal,
        sum(case when type='in' then input_time else 0 end) alltime_in,
        sum(case when type='out' then input_time else 0 end) alltime_out 
    from userlist a join phonelist b 
    on a.phone=b.phone group by a.phone;
    

    Untuk menambah, jika masa panggilan dalam jadual b bukan jenis int statistik minit, anda mungkin perlu menukarnya

    balas
    0
  • PHP中文网

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

    Laksanakan SQL berikut dan anda akan mendapat keputusan berikut: (Hasil yang dijangkakan dalam soalan anda agak tidak jelas)

    id nama telefon taip kira
    23 Xiaobai 15523232323 dalam 14
    23 Xiaobai 15523232323 keluar 287

    SQL

    SELECT
      a.id,
      a.name,
      b.phone,  -- 坐席自己的电话
      b.type,   -- 呼入呼出 'in' or 'out'
      b.count   -- 次数
    FROM phoneList a
      LEFT JOIN
      (SELECT
         phone,
         type,
         count(1) AS count
       FROM phoneLog
       GROUP BY phone, type) b  
      ON a.phone = b.phone

    balas
    0
  • 淡淡烟草味

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

    Anda boleh menggunakan pertanyaan gabungan luar

    balas
    0
  • Batalbalas