2013-05-07 7 views
-1

J'écris une requête sur une base de données PostgreSQL, et je ne suis pas sûr de savoir comment faire un décompte des valeurs non nulles après une jointure. MySQL Je voudrais écrire:postgresql vs mysql left join

select count(a.clicker_id), count(b.clicker_id) from 
(select * from events where type='click') a 
left join (select * from tbl_events where type='conversion')b 
on a.clicker_id=b.clicker_id 

En fait, en essayant d'écrire ce qui suit sans sous-requête:

select date(cl.created_at), count(cl.click_id) as clicks, count(cp.click_id) as Conversions from events_table cl 
left outer join (select click_id, created_at from events_table where type='conversion_potential')cp 
on (cl.click_id=cp.click_id) 
where cl."type"='click' 
and cl.placement_id in (1,2,3) 
group by 1 
+5

Vous effectuez de facto une jointure interne, en raison de votre clause 'b.type = conversion'. Vérifiez que votre requête MySQL est bien celle que vous avez publiée. –

+0

Juste supprimé ma réponse parce que c'était faux. – fog

+0

Y a-t-il vraiment deux tables, événements et tbl_events comme dans la requête _RIGHT_? –

Répondre

1

Vous n'avez pas besoin d'auto rejoindre:

select 
    count(type = 'click' or null) clicks, 
    count(type = 'conversion' or null) conversions 
from events_table 
where campaign_id = 555 
+0

J'ai besoin d'une jointure, car j'ai d'autres choses dans la clause where, comme des clics sous un ID de campagne. J'ai seulement besoin des conversions appartenant aux clics sélectionnés, qui ont le même ID de clic. Conversions en effet était une valeur de type – AdrianBR

+0

@AdrianBR Edited. Montrez vos besoins complets car je crois toujours que vous n'avez pas besoin d'une auto-adhésion. –

+0

J'ai expliqué mal, certaines variables d'ensemble qui excluent ou incluent des éditeurs sur la deuxième instance de la table. – AdrianBR

1

Est-ce pas travail:

select count(a.clicker_id), count(b.clicker_id) 
    from events_table as a 
     left join events_table as b 
     on a.clicker_id=b.clicker_id and b.type='conversion' 
where a.type='click' 
and campaign_id=555 

?