Con respecto a la consulta SQL de un equipo de la NBA que gana campeonatos consecutivos, la solución es muy sutil ~

Columna SQL

Resumen de conocimientos básicos de la base de datos SQL

Resumen del conocimiento avanzado de la base de datos SQL

La siguiente tabla registra el nombre y el año del equipo ganador:
Con respecto a la consulta SQL de un equipo de la NBA que gana campeonatos consecutivos, la solución es muy sutil ~

Escriba una declaración SQL para averiguar quiénes han ganado campeonatos consecutivos durante este período y cuál es la hora de inicio y finalización de los años consecutivos.

resultado de búsqueda:

Con respecto a la consulta SQL de un equipo de la NBA que gana campeonatos consecutivos, la solución es muy sutil ~

La fuente y la respuesta de esta pregunta están disponibles en línea. Para más detalles, lea el salto original.

La respuesta de referencia en línea se resuelve con PL / SQL, aquí usamos SQL Server para ver cómo resolverlo.

El código específico es el siguiente:

CREATE TABLE  #t(TEAM varchar(20), Y int)
INSERT #t(TEAM,Y)  VALUES
('活塞',1990),
('公牛',1991),
('公牛',1992),
('公牛',1993),
('火箭',1994),
('火箭',1995),
('公牛',1996),
('公牛',1997),
('公牛',1998),
('马刺',1999),
('湖人',2000),
('湖人',2001),
('湖人',2002),
('马刺',2003),
('活塞',2004),
('马刺',2005),
('热火',2006),
('马刺',2007),
('凯尔特人',2008),
('湖人',2009),
('湖人',2010);

SELECT RN=IDENTITY(INT),* INTO #a FROM #t ORDER BY TEAM,Y

   SELECT a.TEAM,
   MIN(a.Y) B,
   MAX(a.Y) E
   FROM #a a
   WHERE EXISTS(
     SELECT 1 FROM #a
     WHERE TEAM=a.TEAM
     AND (Y=a.Y-1 OR a.Y=Y-1)
   )
   GROUP BY a.TEAM,Y-RN

DROP TABLE #t,#a

El resultado de la respuesta es el siguiente:

Con respecto a la consulta SQL de un equipo de la NBA que gana campeonatos consecutivos, la solución es muy sutil ~

Interpretemos la solución anterior:

La primera es agregar una columna RN de crecimiento propio a los datos e insertarla en la nueva tabla temporal #ay ordenar EQUIPO e Y.

El segundo es auto-emparejar #a. La condición de emparejamiento es que el nombre del EQUIPO sea el mismo (EQUIPO = a. EQUIPO), y el año Y coincida con los años anteriores y siguientes (Y = aY-1 O aY = Y- 1).

Este partido es una de las sutilezas, para que puedas determinar si el equipo tiene años consecutivos.

Si los nombres de los equipos son iguales y los años son consecutivos, se cumple esta condición;

Si los años son consecutivos, pero los nombres de los equipos no son los mismos, no se cumple esta condición.

Finalmente, al agrupar, no solo se agrupó el equipo EQUIPO, sino que también se agrupó el Y-RN. ¿Por qué quieres agrupar a Y-RN?

Si eliminamos esta condición, nos encontramos con la siguiente situación:

Con respecto a la consulta SQL de un equipo de la NBA que gana campeonatos consecutivos, la solución es muy sutil ~

Los Bulls y los Lakers tardaron algunos años en ganar campeonatos consecutivos nuevamente, pero debido a que no hay agrupación de Y-RN, este equipo y el año del campeonato están satisfechos cuando se emparejan. Dado que el contenido de la tabla #a es realmente así,

Con respecto a la consulta SQL de un equipo de la NBA que gana campeonatos consecutivos, la solución es muy sutil ~

Y = aY-1 O aY = Y-1 Siempre que se satisfaga uno de ellos, se puede considerar que es un año continuo. De hecho, las condiciones anteriores se cumplen después de nuestro procesamiento, por lo que debemos agregar Y- RN de la segunda agrupación para determinar si el medio es Años con intervalos.

Esta es una pregunta muy interesante, tal vez desee probarla usted mismo, tal vez la pruebe para la próxima entrevista ~

Supongo que te gusta

Origin blog.51cto.com/15057820/2656047
Recomendado
Clasificación