Si tiene alguna pregunta, por favor comente o chatee en privado. Charle con el bloguero en privado, gracias.
Enlace al título original: https://sqlzoo.net/wiki/Window_functions
Otros enlaces de solución de preguntas: https://blog.csdn.net/aiqiyizz/article/details/109057732
La solución corresponde a la versión en inglés.
Esta sección debe tratar sobre algunas funciones de uso común
Directorio de artículos
9- Función ventana
9-.1 Calentamiento
SELECT lastName, party, votes
FROM ge
WHERE constituency = 'S14000024' AND yr = 2017
ORDER BY votes DESC
9-.2 ¿Quién ganó?
SELECT party, votes,
RANK() OVER (ORDER BY votes DESC) as posn
FROM ge
WHERE constituency = 'S14000024' AND yr = 2017
ORDER BY party
9-.3
SELECT yr,party, votes,
RANK() OVER (PARTITION BY yr ORDER BY votes DESC) as posn
FROM ge
WHERE constituency = 'S14000021'
ORDER BY party,yr
9-.4
Formato de salida:constituency, party, votes, rank
No es difícil saber qué generar
SELECT constituency,party, votes, RANK() OVER (PARTITION BY constituency ORDER BY votes DESC) AS rank
FROM ge
WHERE constituency BETWEEN 'S14000021' AND 'S14000026'
AND yr = 2017
ORDER BY rank, constituency
9-.5 Solo ganadores
La pregunta anterior y la aplicación de SELECT IN SELECT
SELECT constituency, party
FROM (
SELECT constituency,party, votes, RANK() OVER (PARTITION BY constituency ORDER BY votes DESC) AS rank
FROM ge
WHERE constituency BETWEEN 'S14000021' AND 'S14000026'
AND yr = 2017
ORDER BY rank, constituency
) temp1
WHERE rank = 1
9-.6 asientos escoceses
¿La pregunta parece un poco argot? Difícil de entender el significado de la pregunta. Solo entiendo los datos después de leerlos.
cuántos escaños para cada partido en Escocia ⇒ \ Rightarrow⇒ Ganador del significado del título anterior
Ocupar un asiento corresponde al ganador, perdona mi mala comprensión.
SELECT party, COUNT(*) AS winner
FROM (
SELECT constituency,party, votes, RANK() OVER (PARTITION BY constituency ORDER BY votes DESC) AS rank
FROM ge
WHERE constituency LIKE 'S%'
AND yr = 2017
ORDER BY rank, constituency
) temp1
WHERE rank = 1
GROUP BY party