Ich habe eine konstante Gruppe von Benutzern, die ich herausfiltern und auf jede Abfrage anwenden möchte, um zu sehen, was sie in einer App tun. Ich habe hier herumgestochert und geforscht, um ein besseres Gefühl dafür zu bekommen, aber das ist mir immer noch unklar. Ich bin ein Neuling mit SQL-Anweisungen und JAVA. Jede Hilfe, besonders Erklärung ist sehr willkommen.Select-Anweisungen, Joins und Repurpose-Abfrage in SQL
Ich habe versucht, es mit diesen beiden Artikeln ohne Erfolg herauszufinden: 1 & 2; Diese Beispiele zeigen, wie Sie eine Abfrage erstellen und in einer anderen Abfrage verwenden können, was ich versuche zu tun.
Jemand eine Verpackung erwähnt (siehe Ref. 1), das, was ich zu tun versuchen:
mit wähltSicher, wickeln Sie Ihre zwei Set-Operationen in äußeren Abfragen, die festen Spalten Quelle, dh
genannt, umfassenSELECT 'horrible_query_1' AS Source, * and SELECT 'ugly_query_2' AS Source, *.
Auf diese Weise wird Ihre
UNION
Ihnen alle Spalten aus Ihrer Abfrage plus die Quellenkennung geben.
Meine Frage: Ist es möglich, diese Abfragen in separate Abfragen umzuwandeln, ohne Joins mit der Variablen zu machen? Ich verstehe nicht, wie das funktioniert (ich bin mir nicht sicher, ob ich es auch richtig sage).
Dies ist die Benutzergruppe und Filter ich über alle Anfragen umfunktionieren wollen:
<select id="get_num_x_users" resultClass="java.lang.Integer">
select count(distinct user_id) from positions sp
join position_definitions sd on sp.position_id = sd.id
where sd.position like '%catcher%'
or lower(sd.position) like '%pitcher%'
or lower(sd.position) like '%dh%';
</select>
in diese Abfrage Repurpose (unter ein paar andere):
<select id="get_u_counts" resultClass="java.lang.Integer">
SELECT COUNT(DISTINCT u.id)
FROM searches s
JOIN users u
ON s.user_id = u.id
WHERE search_date > DATE_SUB(curdate(), INTERVAL 3 MONTH)
AND LENGTH(search_term) > 0
AND search_term NOT LIKE ' LIC: SPEC: %'
AND u.type != 'coach';
</select>
Mein Versuch (das nicht arbeiten, wenn ich in mysql
Datenbank bin):
with get_x_users as (
select count(distinct user_id) from positions sp
join position_definitions sd on sp.position_id = sd.id
where sd.position like '%catcher%'
or lower(sd.position) like '%pitcher%'
or lower(sd.position) like '%dh%';),
(SELECT COUNT(get_x_users)
FROM searches s
JOIN users u
ON s.user_id = u.id
AND get_x_users
WHERE search_date > DATE_SUB(curdate(), INTERVAL 3 MONTH)
AND LENGTH(search_term) > 0
AND u.type != 'coach');
Warum geben Sie eine Zählung zurück "Wählen Sie Anzahl (distinct user_id) von Positionen sp ..." aus? Du kannst nicht mitmachen. Sie sollten eine eindeutige Liste von user_id "select distinct user_id aus Positionen sp ..." zurückgeben und user_id in Ihrer Hauptabfrage der u.id beitreten. – strattonn
@strattonn kannst du mir zeigen, was du meinst? – thesayhey