recherche

Maison  >  Questions et réponses  >  le corps du texte

Mysql un-à-plusieurs Comment effectuer des statistiques multi-conditions et multiples sur une table esclave

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

世界只因有你世界只因有你2816 Il y a quelques jours886

répondre à tous(3)je répondrai

  • 高洛峰

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

    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

    répondre
    0
  • PHP中文网

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

    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

    répondre
    0
  • 淡淡烟草味

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

    Vous pouvez utiliser une requête de jointure externe

    répondre
    0
  • Annulerrépondre