Heim > Fragen und Antworten > Hauptteil
Aktivitätstabellenprobe
id (selbst inkrementierende ID), Name (Aktivitätsname), send_time (Startzeit), UID (Benutzer-ID, die die Aktivität erstellt hat) ...
Statistischer Tabellenstatus
id (selbst inkrementierende ID), mtype (Aktivitätstyp 1, 2, 3; 1 stellt die Aktivität innerhalb der Tabellenprobe dar), sid (Quellen-ID, ID der Aktivitätstabelle), pid (Personen-ID), open_time (Zeitpunkt des Öffnens der E-Mail) ...
Fragen Sie die vom Benutzer mit Benutzer-ID 6 erstellte Aktivitätsliste ab (einschließlich Informationen: Aktivitätsname, Startzeit, Gesamtzahl der E-Mails, Gesamtzahl der geöffneten E-Mails).
open_time>0 ist die Aufzeichnung geöffneter E-Mails, feste Bedingung mtype=1 ,sid = Die aktive Tabellen-ID, die von der Probe bis uid=6 abgefragt wurde.
Jetzt wird die Abfrage separat durchgeführt und anschließend das Array verarbeitet.
Ich weiß nicht, wie ich die erforderlichen Daten in einer SQL überprüfen soll. Bitte Gott um Hilfe
高洛峰2017-06-24 09:43:26
SELECT
R.name,
R.send_time,
COUNT(DISTINCT S1.id) send_times,
COUNT(DISTINCT S2.id) open_times
FROM rehearse R
LEFT JOIN
statis S1
ON
R.id = S1.sid AND S1.mtype = 1
LEFT JOIN
statis S2
ON
R.id = S2.sid AND S2.mtype = 1 AND open_time > 0
WHERE
R.uid = 6
GROUP BY
R.id
由于左联了两次,可能会有效率问题,在找更优方法
SELECT
R.name,
R.send_time,
COUNT(S.id) send_times,
(SELECT COUNT(S.id) FROM S WHERE AND S.open_time > 0) open_times
FROM
rehearse R
LEFT JOIN
(SELECT * FROM statis WHERE mtype = 1 GROUP BY sid, open_time AND sid = R.id) S