2016-07-15 10 views
1

Ich versuche Rankwert basierend auf der Anzahl der Produkte zuweisen (z. B. prod 1 hat Zählung von 100, die max sollte Rang 1 haben, prod 2 die zweithöchste Anzahl von 80 sollte Rang von haben 2 und so weiter) hat aber, wenn ich unten Abfrage ausführen, erhalte ich einen Fehler, der sagt - Feld "rank_" fand nicht in der Tabelle
. Bitte lassen Sie mich wissen, wo ich falsch werde
Rang() in bigquery

SELECT 
    ProdName, 
    NoofProds, 
    rank_ 
FROM (
    SELECT 
    ProdName, 
    COUNT(ProdName) AS NoofProds, 
    RANK() OVER (PARTITION BY ProdName ORDER BY NoofProds DESC) AS rank_ 
    FROM 
    [prodtable] 
    WHERE 
    (STRFTIME_UTC_USEC(Timestamp,"%Y%m%d")) = (STRFTIME_UTC_USEC(DATE_ADD(CURRENT_TIMESTAMP(), -1, "day"), "%Y%m%d")) 
    GROUP BY 
    1, 
    3 
    ORDER BY 
    2 DESC) 
GROUP BY 
    1, 
    2, 
    3 
ORDER BY 
    rank_ DESC 

Antwort

1

Versuchen unter

SELECT 
    ProdName, 
    NoofProds, 
    RANK() OVER(ORDER BY NoofProds DESC) AS rank_ 
FROM 
(
    SELECT 
    ProdName, 
    COUNT(ProdName) AS NoofProds 
    FROM [prodtable] 
    WHERE (STRFTIME_UTC_USEC(Timestamp,"%Y%m%d")) = (STRFTIME_UTC_USEC(DATE_ADD(CURRENT_TIMESTAMP(), -1, "day"), "%Y%m%d")) 
    GROUP BY 1 
) 
ORDER BY rank_ DESC