Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como escrever o maior n por consulta de tipo de grupo, mas com condições adicionais?


Isso requer alguma atenção onde colocar a condição (para where ou para on ?) para que você não seja enganado :-) Você precisa adicionar a condição para t1 em where cláusula e para t2 para on cláusula:
SELECT t1.type, t1.name, t1.value
FROM mytable t1
LEFT JOIN mytable t2 ON t1.type = t2.type AND t1.value > t2.value 
    AND t2.popularity > 3 /* here */
WHERE t2.value IS NULL 
    AND t1.popularity > 3 /* and here */

Não testei, mas deve funcionar.

Tentativa de explicação: a condição na cláusula where afeta quais elementos você considera como elementos potenciais com menor valor. Considerando que a condição em on cláusula afeta a ligação:com quais outros elementos você deseja compará-la? Ele define o grupo dentro do qual você compara. Tecnicamente, tem um impacto em quando t2.* será NULL. Você deu a condição em t2.popularity para where Em vez disso, você não receberia nenhum NULL (ou seja, não encontraria elementos com valor mais baixo) para grupos em que os elementos mais baixos tivessem baixa popularidade.