Mysql one-to-many So führen Sie mehrere Bedingungen und mehrere Statistiken für die Slave-Tabelle durch
世界只因有你
世界只因有你 2017-05-18 10:54:32
0
3
832

Haupttabelle Benutzertabelle
ID-Name Telefon (zugeordnetes Feld)

Aus Tabelle Anrufaufzeichnungstabelle
ID-Telefon (zugeordnetes Feld) ot_phone-Zeittyp (eingehende und ausgehende Anrufe) input_time

Kontaktformular
id c_id phone

Firmentabelle
c_id-Name

So zählen Sie alle Anrufe (Listenlimit 0, 10)
Wie viele eingehende Anrufe
Wie viele ausgehende Anrufe
Wie viele Ortsnummern
Wie viele Nummern außerhalb der Stadt
Wie viele eingehende Anrufe insgesamt
Wie viele ausgehende Anrufe insgesamt
Wie viele übereinstimmende Unternehmen (Hauptsächlich aus diesem Grund, da die Telefone in der Kontakttabelle das gleiche Telefon haben, aber unterschiedlichen Unternehmen entsprechen, sind die Daten der linken Join-Summe () ungenau)
Übereinstimmen Sie die Anrufzeit des Unternehmens
.... .

Das Hauptproblem ist: Die Telefonnummer in der Kontakttabelle ist nicht eindeutig, es gibt doppelte Telefonnummern, zum Beispiel arbeitet eine Person für zwei Unternehmen
Nach der Left-Join-Summe
Das Unternehmen verfügt über doppelte Daten und die Daten sind ungenau

Eigentlich habe ich darüber nachgedacht, das Kontakttischtelefon zu deduplizieren und es dann mit anderen Tischen zu verbinden, aber das wäre extrem langsam und würde 50 Sekunden dauern
Der Kontakttisch kostet mehr als 50.000 Yuan

Es scheint, dass dies nicht mit einem einzigen SQL gelöst werden kann

Das Endergebnis
ähnelt
id name phone in_num (Anzahl der eingehenden Anrufe) out_num (Anzahl der ausgehenden Anrufe) local_phone_num (lokale Nummer) .......
23 '小白' 15523232323 45 120 30 .. ...
24 '小红' 18823232323 70 93 41 ......

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

Antworte allen(3)
小葫芦

首先你需要有个定义本地外地号码的字段,然后是否需要展示没有通话记录的号码,需要的话下面的sql改成left join并且右表取值需要做一下判空处理,不需要的话就可以直接用了

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;

补充一下,b表的通话时间如果不是统计的int型分钟数的话,可能你还需要转换一下

Ty80

执行以下SQL,将会得到如下结果: (你问题中期望的结果有点看不懂)

id name phone type count
23 小白 15523232323 in 14
23 小白 15523232323 out 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
淡淡烟草味

可以使用外连接查询

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage