/ / Come SELEZIONARE MAX SQL - sql, derby

Come selezionare MAX SQL - sql, derby

Ho creato la seguente query nel derby per calcolare la percentuale di slugging di tutti i giocatori di baseball ...

 SELECT p1.nameFirst as "First",
p1.nameLast as "Last",
(b1.H + (2 * b1.doubles) + (3 * b1.triples) + (4 * b1.HR)) / (b1.AB * 1.0) as "SLUGGING"
FROM Batting b1 join Players p1 on b1.playerID = p1.playerID
WHERE AB >= 400;

Produce tutti i battitori che ne avevano 400 o più abatte e calcola la loro percentuale di slugging. Il mio problema è che devo selezionare solo un giocatore con la percentuale di slugging massima. Ho provato a circondare il blocco matematico con un SELEZIONA MAX, ma senza risultati. L'output desiderato è ...

Jose Bautista 0.7426900584795321637426900

Inoltre, c'è un modo per formattare quel decimale su una determinata quantità di cifre? Qualsiasi consiglio è apprezzato.

risposte:

2 per risposta № 1

Inserisci ORDER BY SLUGGING DESC LIMIT 1 alla tua query e dovresti ottenere il risultato migliore.

Modificare: Sembra che Derby non supporti la limitazione del numero di righe restituite. Quindi il modo migliore è probabilmente quello di creare una sottoselezione con il massimo risultato di slugging e unirti a quello per ottenere la stampa del playerId.


0 per risposta № 2

Sto cominciando a chiedermi se ti sto aiutando a scrivere qualcosa per l'MBA o a fare i compiti di informatica. :-)

SELECT
p1.nameFirst as "First",
p1.nameLast as "Last",
b.s AS "SLUGGING"
FROM
(
SELECT
MAX(
(b1.H + (2 * b1.doubles) + (3 * b1.triples) + (4 * b1.HR)) / (b1.AB * 1.0)
) AS s
FROM
Batting b1
WHERE
b1.AB >= 400
) m1
JOIN
Batting b
ON
m1.s = (b.H + (2 * b.doubles) + (3 * b.triples) + (4 * b.HR)) / (b.AB * 1.0)
JOIN
Players p1
ON
b1.playerID = p1.playerID
WHERE
b1.AB >= 400

O

* Non sono sicuro che questo sia supportato

SELECT
TOP 1
p1.nameFirst as "First"
, p1.nameLast as "Last"
, (b1.H + (2 * b1.doubles) + (3 * b1.triples) + (4 * b1.HR)) / (b1.AB * 1.0) AS "SLUGGING"
FROM
Batting b1
JOIN
Players p1 on b1.playerID = p1.playerID
WHERE
b1.AB >= 400
ORDER BY
(b1.H + (2 * b1.doubles) + (3 * b1.triples) + (4 * b1.HR)) / (b1.AB * 1.0) DESC

O

* Penso che questo funzionerà

SELECT * FROM (
SELECT
ROW_NUMBER() OVER(
ORDER BY
(b1.H + (2 * b1.doubles) + (3 * b1.triples) + (4 * b1.HR)) / (b1.AB * 1.0) DESC
) as rownum
, p1.nameFirst as "First"
, p1.nameLast as "Last"
, (b1.H + (2 * b1.doubles) + (3 * b1.triples) + (4 * b1.HR)) / (b1.AB * 1.0) AS "SLUGGING"
FROM
Batting b1
JOIN
Players p1 on b1.playerID = p1.playerID
WHERE
b1.AB >= 400
) AS r
WHERE r.rownum = 1