Heim > Fragen und Antworten > Hauptteil
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 ......
高洛峰2017-05-18 10:56:32
首先你需要有个定义本地外地号码的字段,然后是否需要展示没有通话记录的号码,需要的话下面的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型分钟数的话,可能你还需要转换一下
PHP中文网2017-05-18 10:56:32
执行以下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