Mysql un-à-plusieurs Comment effectuer des statistiques multi-conditions et multiples sur une table esclave
世界只因有你
世界只因有你 2017-05-18 10:54:32
0
3
842

Table principale Table utilisateur
id nom téléphone (champ associé)

De la table d'enregistrement des appels
id du téléphone (champ associé) ot_phone type d'heure (appels entrants et sortants) input_time

Formulaire de contact
id c_id phone

Tableau de l'entreprise
c_id nom

Comment compter les appels téléphoniques de tout le monde (limite de liste 0, 10)
Combien d'appels entrants
Combien d'appels sortants
Combien de numéros locaux
Combien de numéros à l'extérieur de la ville
Combien d'appels entrants au total
Combien d'appels sortants au total
Combien d'entreprises correspondantes (principalement à cause de cela, parce que les téléphones dans la table de contacts ont le même téléphone, mais correspondent à des entreprises différentes, les données de gauche join sum() sont inexactes)
Correspond à l'heure d'appel de l'entreprise
.... .

Le problème principal est : le numéro de téléphone dans le tableau des contacts n'est pas unique, il y a des numéros de téléphone en double, par exemple, une personne travaille pour deux entreprises
Après avoir rejoint la somme
L'entreprise aura des données en double et les données sont inexactes

En fait, j'ai pensé à dédupliquer le téléphone de la table de contact puis à le joindre à d'autres tables, mais cela serait extrêmement lent et prendrait 50 secondes
La table de contact coûte plus de 50 000 yuans

Il semble que cela ne puisse pas être résolu avec un seul SQL

Le résultat final
est similaire à
id nom téléphone in_num (nombre d'appels entrants) out_num (nombre d'appels sortants) local_phone_num (numéro local) .....
23 '小白' 15523232323 45 120 30 .... .
24' 小红' 18823232323 70 93 41 ......

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

répondre à tous(3)
小葫芦

Tout d'abord, vous devez disposer d'un champ qui définit les numéros locaux et étrangers, puis si vous devez afficher les numéros sans enregistrements d'appels. Si nécessaire, modifiez le SQL suivant en jointure à gauche et effectuez un jugement nul sur la valeur dans le. bonne table. Sinon, vous pouvez directement Utilisé

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;

Pour ajouter, si la durée de l'appel dans le tableau b n'est pas un type statistique de minutes, vous devrez peut-être la convertir

Ty80

Exécutez le SQL suivant et vous obtiendrez les résultats suivants : (Les résultats attendus dans votre question ne sont pas clairs)

id nom téléphone type compte
23 Xiaobai 15523232323 dans 14
23 Xiaobai 15523232323 sortie 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
淡淡烟草味

Vous pouvez utiliser une requête de jointure externe

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal