2014-05-16 2 views
0

J'ai été bloqué sur ce problème depuis trop longtemps.
Je dois fusionner 3 tables et faire un certain nombre de valeurs distinctes.
j'ai 3 tables

1.User_me ProfileId (string)
répondu (int 1 ou 0)


2.Profiles ProfileId (String)
idLocation (int)

3.lookup_location
id (int)
emplacement (String)
Requête MySQL joignant 3 tables et comptant

Je peux rejoindre nous er_me et profils User_me.profileId = Profiles.profileId
je peux rejoindre les profils et lookup_location ON Profiles.idLocation = lookup_location.id

Sous Profils je dois compter le nombre de valeurs distinctes pour idLocation où User_me.profileId = Profils .profileId
Je dois aussi compter le nombre de Profiles.idLocation qui ont User_me.responded = 1

J'ai ceci:

SELECT lookup.location, count(*) as total 
FROM User_me user 
JOIN Profiles 
    ON user.profileId= profiles.profileId 
JOIN lookup_location lookup 
    ON profiles.idLocation = lookup.id 
GROUP BY profiles.idLocation 

mais je dois encore avoir la colonne de me donner le nombre où User_me.responded = 1
Quelque chose comme:

SELECT lookup.location, count(*) as total, count(*) responded 

Répondre

1

Si je comprends bien votre question, vous pouvez vous une déclaration case dans la count total:

SELECT lookup.location, count(*) as total, 
    count(case when user.responded = 1 then 1 end) as responded 
FROM User_me user 
JOIN Profiles 
    ON user.profileId= profiles.profileId 
JOIN lookup_location lookup 
    ON profiles.idLocation = lookup.id 
GROUP BY profiles.idLocation 

Puisque vous utilisez MySQL, vous pouvez également utiliser quelque chose comme sum(user.responded = 1).

+0

OUI! Je vous remercie!!! – altoids