2017-12-08 1 views
-1

Ich versuche Website-Besucher zu segmentieren, ob sie jemals von uns gekauft haben oder nicht. Als ich in dem unten stehenden Feld in der SELECT-Anweisung setzen, erhalte ich die weiter unten Fehler:BigQuery - CASE WANN x IN (Feld aus einer anderen Tabelle), führt zu Semijoin Fehler

CASE WHEN fullVisitorId IN (SELECT fullVisitorId FROM [xxxx-0000:36363.unique_FullVisitorIds_of_past_purchasers_table]) THEN "Purchased" 
ELSE "Never Purchased" END AS Previous_Purchase 

Fehler: "Fehler: (L10: 20): Semijoin Ausdruck (dh" x IN (SELECT ...) ") nur in WHERE- oder HAVING-Klauseln unterstützt."

Wie würde ich das machen?

Dank

+2

Haben Sie versucht, [Standard-SQL] (https://cloud.google.com/bigquery/docs/reference/standard-sql/) zu verwenden, was bei Joins flexibler ist? Sie müssen einige Änderungen an Ihrer Syntax vornehmen, z. B. für den Tabellennamen, wie im [Migrationsleitfaden] (https://cloud.google.com/bigquery/docs/reference/standard-sql/migrating-from-) beschrieben. Legacy-SQL). –

+0

Danke für die Info. Der Wechsel zu Standard SQL bringt einige andere Probleme für mich mit sich, also bin ich mit dem Join wie unten erwähnt gegangen. Prost. – Balkan

+0

Können Sie erklären, was die Probleme sind? –

Antwort

0

Ich schlage vor, ein zusammengefasstes Ergebnis entlang dieser Linien verbindet:

SELECT 
    CASE WHEN p.has_purchased = 1 THEN "Purchased" 
     ELSE "Never Purchased" 
    END AS Previous_Purchase 
FROM existing_from_table f 
LEFT JOIN (
    SELECT fullVisitorId, 1 has_purchased 
    FROM [xxxx-0000:36363.unique_FullVisitorIds_of_past_purchasers_table] 
    GROUP BY fullVisitorId 
    ) p on f.fullVisitorId = p.fullVisitorId 

NB: Die Gruppe verwendet wird, so dass die Gesamtanzahl der Zeilen ist nicht betroffen.

+0

Vielen Dank, das hat den Trick gemacht. – Balkan

Verwandte Themen