sql >> Databasteknik >  >> RDS >> Oracle

Hur visar man posten med det högsta värdet i Oracle?

Ibland ORA-00907: missing right parenthesis betyder precis det:vi har en vänster parentes utan en matchande höger. Men det kan också orsakas av ett syntaxfel i en del av en sats som begränsas av parenteser.

Det är den andra orsaken här:LIMIT är ett Mysql-kommando som Oracle inte känner igen. Du kan använda en analytisk funktion här:

SELECT A1.artistid, A1.firstname, TEMP1.avgProfit
FROM 
(
    select  artistid
            , avgProfit
            , rank() over (order by avgProfit desc) as rnk
    from (
        SELECT 
            AVG(salesPrice - AcquisitionPrice) as avgProfit, 
            W1.artistid as artistid
        FROM dtoohey.trans T1
        INNER JOIN dtoohey.WORK W1
        ON W1.workid = T1.workid
        GROUP BY artistid
    ) 
) TEMP1
INNER JOIN dtoohey.artist A1
    ON A1.artisid = TEMP1.artistid
where TEMP1.rnk = 1

Detta använder funktionen RANK() som kommer att returnera mer än en rad om flera artister uppnår samma genomsnittliga vinst. Du kanske vill använda ROW_NUMBER() istället. Analytiska funktioner kan vara mycket kraftfulla. Läs mer .

Du kan använda ROWN_NUMBER(), RANK() och DENSE_RANK() på valfri topp-n problem. Du kan också använda en av dem för att lösa ditt första problem.

Det är förmodligen ett dataproblem. Om ett av siffrorna i (salesPrice - AcquisitionPrice) är null blir resultatet null och kommer inte att inkluderas i genomsnittet. Om alla rader för en artist är null kommer AVG() att vara null.

När det händer kommer sorteringsordningen att sätta NULL sist. Men eftersom PARTITION BY-satsen sorteras efter AvgProfit desc som sätter NULL-resultaten i rang 1. Lösningen är att använda NULLS LAST i windowing-satsen:

            , rank() over (order by avgProfit desc nulls last) as rnk

Detta kommer att garantera dig ett resultat som inte är noll i toppen (förutsatt att minst en av dina artister har värden i båda kolumnerna).



  1. Vad är syftet med en IMPLICIT JOIN i sql?

  2. Skapa index på json-fältet i PostgreSQL 9.2

  3. Sorteringsproblem, är det möjligt att nedgradera/konvertera från utf8mb4_unicode_ci till utf8_general_ci?

  4. Hur kan jag använda ADO.NET DbProviderFactory med MySQL?