Pergunta

Tudo bem, esta (3a; problema de amostra com a resposta fornecida) tem-me coçar a cabeça :

bbc (nome, região, área, população, PIB)
3a. Encontre o maior país em cada região:

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

Eu entendo o conceito de 'WHERE y.region = x.region' quando eu pensar sobre isso em termos de motor db looping sobre as entradas da tabela e adequar cada x.region com o y.region atual (no SELECT aninhada) ... mas wtf significa 'AND population > 0' fazer? Não é uma resposta certa sem ele, mas eu não vejo como não ...

Foi útil?

Solução

Essa cláusula é não só porque há uma entrada na tabela de Europa (para o Vaticano), que tem NULL na coluna população. O seguinte também funciona e eu acredito que é mais compreensível:

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)

Na documentação do MySQL para TODOS subqueries , há um comentário útil (deles ênfase):

Em geral, tabelas contendo NULL valores e mesas vazias são "casos extremos". Ao escrever código subconsulta, sempre considerar se você tem tomado essas duas possibilidades em conta.

Outras dicas

Estou especulando-lo aqui.

E se a população é nulo para todos os registros de uma região específica?

EDIT:. Ele pode ser considerado uma espécie de rede de segurança para ignorar valores-ve na população (não é um cenário da vida real)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top