2017-04-26 5 views
0

Ich muss eine Ansicht erstellen, die ziemlich genau wie eine Tabelle mit einigen einfachen Transformationen ist, und ich möchte sicherstellen, dass die Werte in einer bestimmten Spalte nicht doppelt sind. Lassen Sie uns also sagen, dass die Tabelle wie folgt aussieht:Große Abfrageansicht (Tabelle ohne doppelte Zeilen)

ID, ColumnA, ColumnB 
------------------- 
1 cars  shirts 
2 tvs  dogs 
1 fingers computers 

Und die resultierende Ansicht würde wie folgt aussehen:

ID, ColumnA, ColumnB 
------------------- 
1 cars  shirts 
2 tvs  dogs 

So ist es ein Äquivalent distint (ID) zu wählen, ColumnA, columnB?
Was ist der effizienteste Weg?

+1

Was wäre die Logik der Auswahl der Reihe mit Autos über die Finger? –

+0

Es macht mir eigentlich nichts aus, wer ausgewählt wird, solange es nur einen gibt :) – CCC

+0

Das ist ok. Sieh also Elliotts Antwort als: o) während meine Antwort noch relevant ist –

Antwort

1

auf asc Ordnung basiert Wenn Sie nur eine beliebige Zeile für jede ID möchten, verwenden Sie ANY_VALUE:

#standardSQL 
WITH Input AS (
    SELECT 1 AS ID, 'cars' AS ColumnA, 'shirts' AS ColumnB UNION ALL 
    SELECT 2 AS ID, 'tvs' AS ColumnA, 'dogs' AS ColumnB UNION ALL 
    SELECT 1 AS ID, 'fingers' AS ColumnA, 'computers' AS ColumnB 
) 
SELECT 
    ANY_VALUE(t).* 
FROM Input AS t 
GROUP BY t.ID; 

Oder Sie können den ARRAY_AGG Trick verwenden, um die letzte Reihe wählen basierend auf einer Bedingung.

1

ist unten für BigQuery Standard-SQL

#standardSQL 
WITH yourTable AS (
    SELECT 1 AS id, 'cars' AS columnA, 'shirts' AS columnB UNION ALL 
    SELECT 2, 'tvs', 'dogs' UNION ALL 
    SELECT 1, 'fingers', 'computers' 
) 
SELECT r.* 
FROM (
    SELECT ARRAY_AGG(t ORDER BY columnA LIMIT 1)[OFFSET (0)] AS r 
    FROM yourTable t 
    GROUP BY id 
) 
-- ORDER BY id 

Hinweis: Sie einige Logik über die Auswahl Reihe mit Autos über die Finger haben sollte! Above Version (als Beispiel) ist

Verwandte Themen