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 № 1Inserisci 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