Heim  >  Fragen und Antworten  >  Hauptteil

Beim Abrufen von Daten aus mehreren Tabellen: Wie erfolgt eine Abfrage basierend auf Einträgen in der Tabelle in der SQL-Gruppierung?

Ich habe zwei Tische

  1. Klicken Sie auf 2.Fahrt

Klicken Sie auf die Tabelle

id |. Zeit

Fahrplan

id |. Zeitstempel

Ich möchte Daten aus zwei Tabellen erhalten. GROUP BY EXTRACT(DAY FROMride.timestamp) Ich erhalte die Daten aber nur dann, wenn ich in beiden Tabellen Einträge für denselben Tag habe, aber ich benötige die Daten unabhängig davon, ob beide Tabellen keine Daten enthalten. Ich weiß nicht, ob OUTER Join eine Antwort ist, aber MySQL unterstützt OUTER JOIN nicht

Meine aktuelle Abfrage erhält die Daten nur, wenn in beiden Tabellen Einträge vorhanden sind

COUNT(distinct ride.id) AS ride_ads, 
COUNT(distinct clicks.id) AS clicks
FROM ride INNER JOIN clicks ON EXTRACT(DAY FROM ride.timestamp)=EXTRACT(DAY FROM clicks.time)
GROUP BY EXTRACT(DAY FROM ride.timestamp), EXTRACT(DAY FROM clicks.time)```

P粉038856725P粉038856725179 Tage vor336

Antworte allen(1)Ich werde antworten

  • P粉529245050

    P粉5292450502024-04-05 00:40:32

    SELECT 
        DATE(ride.timestamp) AS Day,
        COUNT(DISTINCT ride.id) AS ride_ads,
        COUNT(DISTINCT clicks.id) AS clicks
    FROM
        ride
            LEFT JOIN
        clicks ON DATE(ride.timestamp) = DATE(clicks.time)
    WHERE
        DATE(ride.timestamp) > NOW() - INTERVAL 15 DAY
    GROUP BY Day 
    UNION SELECT 
        DATE(clicks.time) AS Day, #selecting date from second table since I might have record in this table and I am using group by Day 
        COUNT(DISTINCT ride.id) AS ride_ads,
        COUNT(DISTINCT clicks.id) AS clicks
    FROM
        ride
            RIGHT JOIN
        clicks ON DATE(ride.timestamp) = DATE(clicks.time)
    WHERE
        DATE(clicks.time) > NOW() - INTERVAL 15 DAY
    GROUP BY Day
    ORDER BY Day

    Antwort
    0
  • StornierenAntwort