Mysql one-to-many Bagaimana untuk melaksanakan pelbagai keadaan dan statistik berbilang pada jadual hamba
世界只因有你
世界只因有你 2017-05-18 10:54:32
0
3
841

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 ......

世界只因有你
世界只因有你

membalas semua(3)
小葫芦

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

Ty80

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
淡淡烟草味

Anda boleh menggunakan pertanyaan gabungan luar

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan