Pregunta

Muy bien, este (3a; problema de muestra con la respuesta proporcionada) me tiene rascándome la cabeza :

  

bbc (nombre, región, área, población, pib)
   3a. Encuentre el país más grande de cada región:

SELECT region, name, population
  FROM bbc x
 WHERE population >= ALL
    (SELECT population
       FROM bbc y
      WHERE y.region = x.region
        AND population > 0)

Entiendo el concepto de ' WHERE y.region = x.region ' cuando lo pienso en términos del motor de db que recorre las entradas de la tabla y hace coincidir cada x.region con la actual y.region (en el SELECCIONADO anidado) ... pero wtf hace ' Y población > 0 'hacer? No es una respuesta correcta sin ella, pero no veo cómo no ...

¿Fue útil?

Solución

Esa cláusula está ahí solo porque hay una entrada en la tabla de Europa (para el Vaticano) que tiene NULL en la columna de población. Lo siguiente también funciona y creo que es más comprensible:

SELECT region, name, population
  FROM bbc x
 WHERE population >= ALL
    (SELECT population
       FROM bbc y
      WHERE y.region = x.region
        AND population IS NOT NULL)

En el documentación de MySQL para TODAS las subconsultas , hay un comentario útil (énfasis suyo):

  

En general, las tablas que contienen valores NULL y tablas vacías son "casos extremos". Al escribir el código de subconsulta, siempre considere si ha tenido en cuenta esas dos posibilidades.

Otros consejos

Estoy especulando aquí.

¿Qué sucede si la población es nula para todos los registros de una región específica?

EDITAR: se puede considerar una especie de red de seguridad para ignorar los valores -ve en la población (no un escenario de la vida real).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top