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

mysql - Comment implémenter une requête d'association multi-tables?

Table A
LogID    UserId    Date
00001    0001      05-01
00002    0002      05-02
00003    0003      05-02
00004    0004      05-02
00005    0003      05-03
00006    0001      05-03  
00007    0002      05-03

Table B
UserId    Status
0001      Active
0002      Active  
0003      Active
0004      Inactive

Table C
UserId    Province
0001      Yunnan
0002      Fujian  
0003      Fujian
0004      Beijing

Les trois tables ci-dessus dans la base de données, liées via l'ID utilisateur. Le tableau A est un tableau d'informations de connexion utilisateur avec LogID comme clé primaire ; le tableau B stocke l'état actif de l'utilisateur et le tableau C stocke les informations de localisation géographique de l'utilisateur. Maintenant, je veux obtenir la somme cumulée du nombre d'autres états en fonction du regroupement de dates dans le tableau A. Le résultat de retour attendu est :

Date    Active    Inactive    Yunnan    Fujian    Beijing
05-01   1         0           1         0         0   
05-02   2         1           0         2         1   
05-03   3         0           1         2         0

Peut-il être implémenté avec une instruction SQL ?

巴扎黑巴扎黑2639 Il y a quelques jours1058

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

  • 给我你的怀抱

    给我你的怀抱2017-07-04 13:46:12

    La logique métier de cette table est très lâche, je ne vais donc pas l'écrire pour vous de manière vague. Traitez simplement votre relation de table ABC comme plusieurs à un :

    .
    select 
        a.date,
        sum(case when b.status='Active' then 1 else 0 end) 'Active',
        sum(case when b.status='Inactive' then 1 else 0 end) 'Inactive',
        sum(case when c.province ='Yunnan' then 1 else 0 end) 'Yunnan',
        sum(case when c.province ='Fujian' then 1 else 0 end) 'Fujian',
        sum(case when c.province ='Beijing' then 1 else 0 end) 'Beijing'
     from a left join b on a.userid=b.user_id join c on a.user_id=c.user_id 
     group by a.date order by a.date;

    répondre
    0
  • Annulerrépondre