Ich habe die folgende SQL immer korrekte Ergebnis hat:aus mehreren Multiple Counts auswählen Tabelle JOIN, die mehrere Group_BYs
SELECT
companies.name as company_name,
locations.country_code as location,
ad_messages.ad_template_name as creative,
impressions.width as width,
impressions.height as height,
count('impressions.id') as impressions
FROM "impressions"
INNER JOIN "ad_messages" ON "ad_messages"."id" = "impressions"."ad_message_id"
INNER JOIN "visitors" ON "visitors"."id" = "ad_messages"."visitor_id"
INNER JOIN "companies" ON "companies"."visitor_id" = "visitors"."id"
INNER JOIN "locations" ON "locations"."visitor_id" = "visitors"."id"
WHERE (visitors.user_id = 171)
AND (impressions.created_at >= '2016-03-17 16:17:20.241276'
AND impressions.created_at <= '2016-05-16 16:17:20.241336')
GROUP BY
companies.name,
locations.country_code,
ad_messages.ad_template_name,
impressions.width,
impressions.height
ORDER BY
companies.name,
locations.country_code,
ad_messages.ad_template_name,
impressions.width,
impressions.height
ich das Ergebnis (Anzahl der Impressions) gruppiert und subgrouped die company_name, Standorte und ad_messages.
Ich kann den Prozess für Klicks wiederholen und wie so Ergebnis (Anzahl der Klicks) gruppiert und subgrouped durch verschiedene Filter erhalten:
SELECT
companies.name as company_name,
locations.country_code as location,
ad_messages.ad_template_name as creative,
ad_clicks.width as width,
ad_clicks.height as height,
count('ad_clicks.id') as ad_clicks
FROM "ad_messages"
INNER JOIN "ad_clicks" ON "ad_clicks"."ad_message_id" = "ad_messages"."id"
INNER JOIN "visitors" ON "visitors"."id" = "ad_messages"."visitor_id"
INNER JOIN "companies" ON "companies"."visitor_id" = "visitors"."id"
INNER JOIN "locations" ON "locations"."visitor_id" = "visitors"."id"
WHERE (visitors.user_id = 171)
AND (ad_clicks.created_at >= '2016-03-17 16:17:20.241276'
AND ad_clicks.created_at <= '2016-05-16 16:17:20.241336')
GROUP BY
companies.name,
locations.country_code,
ad_messages.ad_template_name,
ad_clicks.width,
ad_clicks.height
ORDER BY
companies.name,
locations.country_code,
ad_messages.ad_template_name,
ad_clicks.width,
ad_clicks.height
jedoch - Ich mag beide Impressionen und Klicks kombinieren würde in einer Abfrage habe ich versucht:
SELECT
companies.name as company_name,
locations.country_code as location,
ad_messages.ad_template_name as creative,
impressions.width as width,
impressions.height as height,
ad_clicks.width as click_width,
ad_clicks.height as click_height,
count('impressions.id') as impressions,
count('ad_clicks.id') as clicks
FROM "ad_messages"
INNER JOIN "impressions" ON "impressions"."ad_message_id" = "ad_messages"."id"
INNER JOIN "visitors" ON "visitors"."id" = "ad_messages"."visitor_id"
INNER JOIN "companies" ON "companies"."visitor_id" = "visitors"."id"
INNER JOIN "locations" ON "locations"."visitor_id" = "visitors"."id"
LEFT JOIN "ad_clicks" ON "ad_clicks"."ad_message_id" = "ad_messages"."id"
WHERE (visitors.user_id = 171)
AND (impressions.created_at >= '2016-03-17 16:17:20.241276'
AND impressions.created_at <= '2016-05-16 16:17:20.241336')
GROUP BY
companies.name,
locations.country_code,
ad_messages.ad_template_name,
impressions.width,
impressions.height,
ad_clicks.width,
ad_clicks.height
Das gab mir völlig falsche Ergebnisse! count (impression) und count (ad_clicks) hatten den gleichen Wert. Gibt es eine Möglichkeit, korrekte Zahlen aus einem SQL zu erhalten?
Jede Hilfe wird geschätzt. Vielen Dank!