Problema SQL con N alta antes del desbordamiento de pila de estadísticas segmentadas

      He hecho algunas preguntas SQL recientemente, quiero resumirlo, así que tengo la siguiente publicación de blog.
      A menudo se encuentra un tipo de demanda en SQL: se necesita N antes de las estadísticas de segmento. Por ejemplo: los tres primeros en cada clase, los tres primeros en cada materia, los cinco primeros en cada departamento, etc.
      Este tipo de problema puede dividirse en dos situaciones:
      1. El 1 superior es el primero, que es el primero.
      2. El N superior es alto, es decir, los tres primeros, los cinco primeros, etc.

1. Top 1 alto

La primera solución

      Para los campos segmentados (los tres primeros en cada clase, luego cada clase es un campo segmentado), se puede obtener el grupo por de acuerdo con la demanda máxima o mínima. Pero después de este tipo de descubrimiento, generalmente solo hay campos de segmento y valores específicos. Si desea verificar el nombre del estudiante, el género, etc., debe tratarlo nuevamente (únase de acuerdo con el valor específico o en dónde).

La segunda solución ()

      Usando over (), hay tres funciones de clasificación: row_number (), rank (), dense_rank (). Porque solo te importa el primero, por lo que puedes usar cualquiera. Utilice directamente la función de clasificación, particione por en el campo segmentado en el orden, ordene por el valor específico y decida si desea descifrarlo según las necesidades del negocio. Luego anide las subconsultas y ordene los campos para filtrar.
      Me gusta este método porque todos los campos se pueden mostrar sin tener que ser tan problemático como agrupar.
      Pero no parece ser compatible antes de mysql8.0 ...

Caso

      Es un problema escribir un caso de prueba por mí mismo, pero es un problema escribir un caso de prueba usted mismo, veamos la pregunta que hice: el empleado mejor pagado del departamento https://blog.csdn.net/weixin_42845682/article/details/105437193.

En segundo lugar, la N superior

La primera solución

      Puede usar subconsultas para averiguar cuántos valores son mayores que cada valor. Luego use N para filtrar, y al mismo tiempo coopere con el campo de segmento. (Míralo)
      No me gusta mucho este método ... siento que es demasiado legible.

La segunda solución ()

      Todavía me gusta este enfoque ...
      usando over (), hay tres funciones de clasificación: row_number (), rank (), dense_rank (). Según las necesidades comerciales específicas, decida cuál necesita usar.
      Utilice directamente la función de clasificación, particione por en el campo segmentado en el orden, ordene por el valor específico y decida si desea descifrarlo según las necesidades del negocio. Luego anide las subconsultas y ordene los campos para filtrar.
      Al mismo tiempo, se recomienda que los estudiantes que quieran avanzar vean esto: mysql, para lograr el efecto de dense_rank (). -No use dense_rank () para lograr el efecto de la secuencia numérica. https://blog.csdn.net/weixin_42845682/article/details/105253070

Caso

      Es demasiado engorroso escribir un caso de prueba por mí mismo, pero es demasiado problemático escribir un caso de prueba usted mismo, veamos la pregunta que hice: todos los empleados en los tres salarios principales del departamento https://blog.csdn.net/weixin_42845682/article/details/ 105437449.
      
      
      
      
      
      
      
      
      
      

48 artículos originales publicados · Me gusta 36 · Visitas 130,000+

Supongo que te gusta

Origin blog.csdn.net/weixin_42845682/article/details/105438532
Recomendado
Clasificación