Nessa aula, vamos aprender a diferença entre o uso do DISTINCT e do GROUP BY com HAVING.
Nós do Cur...
Video Transcript:
olá pequeno gafanhoto seja bem vindo a mais uma aula do seu curso de banco de dados como sql do curso em vídeo o meu nome é gustavo guanabara eu sou professor e chegamos a mais uma aula de banco de dados e vamos dar continuidade ao assunto que a gente estava tratando na aula anterior de como obter dados das tabelas utilizando como o select e essa é a terceira aula a tratar sobre o comando select é meu querido fazia idéia de como o select era grande mas não sabia que tinha tanta coisa assim né e pode acreditar em mim a gente não viu tudo e nem vai ver tudo que o select pode fazer mas ainda falta um bocadinho fica tranquilo relaxa e você que está chegando agora e está procurando saber um pouco mais sobre select saiba que essa é a terceira aula sobre o comando ea décima terceira aula de um curso que já está em andamento então se você clica aqui ó você vai diretamente para o curso completo então não perca a oportunidade de acompanhar o curso de banco de dados completo é completa não tem aquela historinha de olha assistir quatro aulas aqui depois você vai ser desviado por um site que você vai ter que pagar para poder assistir as outras não meu querido aqui todas as aulas são gratuitas e com qualidade e se você se lembra da aula passada uma das coisas que a gente viu no select uma das últimas coisas foi distinguir registros eu sei que muita gente ficou confuso com isso e eu resolvi explicar sobre uma outra ótica dá uma olhada aqui que com certeza se ficou dúvida dá uma passada ela vai subir agora e esse conceito é muito importante para você poder entender o que eu vou falar nessa aula que é sobre agrupamentos então na aula passado a gente falou sobre distinção ea palavra distinct era utilizada para isso vamos imaginar a seguinte situação nós temos essa fila de pessoas e eu pergunto qual é a idade de todas elas elas vão responder rapidamente todo mundo responde aí obrigado criança maldita se você perceber na sua tela várias pessoas têm idades iguais se eu utilizar o comando distinct distinguir elas vão vir aqui como exemplo por exemplo aqui ó separei em dois grupos se você perceber ali o primeiro da esquerda tem 65 anos então do lado direito eu vou eliminar quem tenha 65 anos o segundo menino a criança maldita em três anos eu vou eliminar também todo mundo que tem a idade igual a ele o próximo tem 32 anos eu vou eliminar todo mundo que também tenha 32 anos isso porque eu estou distinguindo-o diz ti ti ti é exatamente isso que expliquei na aula passada ele vai considerar apenas uma ocorrência de cada valor dentro do registro isso porque para a distinção não importa a quantidade ou o tipo de pessoas o que importa são apenas os valores ficou claro ele vai simplesmente pegar olha só desse grupo de gente se utilizar um distinto lá para selecionar os registros por unidade ele vai pegar todo mundo que tem a mesma idade vai pegar somente uma ocorrência e vai jogar o resto tudo fora e eu não vou dizendo aqui que o distingue é inútil simplesmente estou dizendo me importa mais saber quais são as cidades se você tem por exemplo um curso e você tem muitos alunos cadastrados e você quer saber em que bairros os seus alunos moram se você é select bairro foram alunos você vai ver todos os bairros inclusive com repetições mas eu quero uma lista de bairros guanabara beleza o distingue na frente ele vai selecionar somente os bairros então assim não é que distingue que seja inútil é porque às vezes eu preciso fazer uma coisa e eu não consigo e essa coisa é agrupar essas pessoas vamos imaginar a mesma situação todo mundo com a sua idade aí até mesmo a criança maldita já falou dela o que eu vou fazer aqui agora em vez de distinguir eu vou agrupá-los perceba aí agora eu agrupei eles por idade criando um grupo para cada tipo de idade recebem ó eu tenho pessoas com 65 anos pessoas com três anos pessoas com 32 anos e uma pessoa no canto com 30 anos então eu estou agrupando não distinguindo são duas operações que você pode fazer com o select isso vai depender do que você queira fazer fica claro então vamos voltar para os exemplos da aula passada na aula passada se você se lembra muito bem a gente tinha aquela tabela com 10 registros e utiliza o comando select distintos de carga foram cursos order by carga então ele vai selecionar todas as cargas só que ele vai querer as distintas e aí eu tenho aqui ó eu tenho vários cursos que têm carga horária de 40 como você acabou de ver aqui ele vai simplesmente pegar só o primeiro aquele html5 e vai ignorar todos os outros você percebe nesses quadradinhos verdes quais foram selecionados então ele vai gerar uma listagem com todas as cargas possíveis no meu caso ali ordenado por carga então você pode analisar da seguinte maneira eu tenho cursos com carga horária de cinco dez 20 30 e 40 horas dentro dos meus cursos cadastrados e o que importa aqui mais uma vez são apenas os números não me importa saber quantos cursos têm 40 horas/aula guanabara e se importar saber quantos cursos têm aí você não pode distinguir aí você tem que agrupá e agrupá é extremamente simples você vai fazer o seguinte select carga foram cursos e no lugar de utilizar o distinguished antes da carga você vai utilizar o grupo bae carga grupo bairro significa agrupado por então vou selecionar as duplas os registros agrupados por carga exatamente como eu fiz com a idade das pessoas no exemplo anterior o que eu vou gerar é o seguinte eu tenho aí grupos o grupo verde é o que tem mais registros de todas as outras cargas tem apenas uma ocorrência eu tenho lá sim o azulzinho 10 o vermelhinho 21 roxo e amarelo com 30 fazendo esse agrupamento o resultado vai ser esse as cargas 40 2010 35 tá mas o resultado foi exatamente o mesmo não exatamente pequeno gafanhoto agora os registros eles foram agrupados não distinguidos o resultado visual na sua tela nesse momento pode até ter sido parecido mas ele está longe de ser igual distinct vamos ver um outro exemplo aqui vamos adicionar um parâmetro aquele comando que a gente acabou de ver então comandante acabou de ver é select carga foram cursos grupo vai carga o que eu vou fazer o seguinte eu vou adicionar uma função de agregação que a gente viu na aula passada lembra dela passada a gente viu o cat o sã o avg 1min o max dá pra usar tudo isso utilizando agrupamento do sql então nós vimos anteriormente o resultado desse comando é esse daí os arquivos foram poupados e selecionados aparecendo na tela apenas uma vez vamos agora adicionar um parâmetro utilizando uma função de agregação co por exemplo o counter nome o counter como você já viu ele conta quantos registros ocorreram se os seus registros estão agrupados ele permite que você conte quantos registros estão agrupados também dá uma olhada aqui sendo assim ele vai criar mais uma coluna com o county e como você vai interpretar isso dá uma olhada na tabela da esquerda e da direita enquanto os quadradinhos verde você encontra seis não é mesmo olha agora para a tabela da direita eu tenho seis cursos de 40 horas eu tenho um curso de 20 horas um curso de 10 horas um curso de 30 horas e um curso de cinco horas e aí gostou vamos partir para o nosso ambiente do work bent e ver como funciona na prática então já estou aqui no rock band meu servidor já está ativo eu vou dar aqui ó select asterístico from cursos contra o inter ele já me deu aqui todos os cursos selecionados numa listagem aqui ó eu tenho todos os 30 cursos se eu colocar pra mostrar pote aulas ele vai mostrar que eu tenho 37 aulas 15 8 20 vamos ordenar que também então eu tenho dois cursos com oito aulas dos cursos com dez aulas um monte de curso com 12 aulas mais um monte com 15 e assim sucessivamente se você quiser distingui-los você pode colocar distinct agora eu tenho uma listagem do total de aulas de cada curso o problema é que eu não consigo saber quantos cursos têm 8 quando os cursos têm nove eu só sei que existem cursos com oito existem cursos com 9 para saber a quantidade eu não posso distinguir los eu tenho que agrupá los então falei aqui ó vamos agrupar por total de aulas o resultado vai ser exatamente o mesmo serviu como era antigamente como está agora é exatamente igual pode voltar o vídeo que está exatamente igual o que eu vou fazer agora é além de agrupar totaliza los por exemplo a um cateterismo só eu quero contar quantos registros têm dentro de cada agrupamento aqui ó eu tenho com oito aulas eu tenho dois cursos com dez aulas eu tenho dois cursos com 11 com 12 aulas eu tenho cinco lembra do que a gente tinha muito curso com 12 aulas muito curso com 15 aulas e eu tenho também muito curso com 30 aulas quer ver aqui vamos selecionar ó eu quero selecionar asterístico from cursos o é totti aulas igual a 30 ele vai ter que mostrar seus registros lá exatamente seis registros word excel android suíte wordpress e dilma todos eles têm 30 aulas e isso se reflete na quele comando anterior com 30 aulas eu tenho seis cursos vão fazer sua prova final vamos ver quantos têm 12 aulas ele tem que mostrar cinco cursos vamos ver aqui ó select a chevron cursos onde aula seja 12 contra o enter lá eu tenho seis sharp powerpoint hardware s ou e modelagem de dados eu tenho cinco cursos aqui exatamente o resultado que eu tinha com 12 aulas cinco curso eu pra entender pra que serve o agrupamento e você pode agrupar utilizando o e também por exemplo eu quero selecionar todos os registros dos cursos onde o total de aulas seja maior que 30 então eu quero somente nos cursos que têm mais de 30 aulas então eu tenho somente dois cursos com mais de 30 aulas vão botar mais que 20 a primeira mais registros aqui eu tenho esses cursos aqui com mais de 20 aulas você percebe aqui que vários tem 40 horas então eu falei o seguinte vamos ver aqui eu tenho aqui vários cursos com 30 aulas aqui ó 30 aulas com 30 aulas 30 30 e 31 alguns têm 40 horas de carga outras têm 60 horas de carga eu quero selecionar somente aqueles que têm 30 aulas não vou colocar aqui onde o curso tenha 30 aulas ataque somente de 30 aulas e você vê que tem alguns que tem 40 e alguns que tem 60 eu posso agrupá-los também por isso não posso mandar mostrar aqui ó quero mandar mostrar carga e o total de aulas pra quem tem aulas igual a 30 agrupados por carga ó ele vai mostrar eu tenho 40 horas 60 horas todos eles têm o total de aulas de 30 anos estava em mostrar o total de aulas aqui né não tenho desse grupo que atende eu tenho cursos com 40 cursos com 60 se eu quiser saber quantos vêm aqui ó county register isco para o atacar onde qualquer campo aqui há um nome quanto os nomes de cursos têm essa carga e atende todas essas características então dá uma olhadinha no comando eu estou selecionando quero mostrar a carga e quantos cursos têm na tabela cursos que tenham total de aula igual a 30 mas eu quero agrupar por carga então vamos ver eu tenho cursos de 40 horas de curso de 60 horas quantos dois cursos de 44 cursos com 60 horas vamos ver exatamente isso então ou select asterisco concursos ou selecionar todas as colunas de cursos onde o total de aulas seja igual a 30 então ele tem que mostrar dois cursos de 44 cursos de 60 vamos ver eu tenho dois cursos com 40 e eu tenho um dois três quatro cursos com 60 exatamente o resultado que esse comando está me dando dois cursos de 44 cursos com 60 horas tranquilo gostou assim o agrupamento é mais que isso o mais legal do agrupamento é você conseguir utilizar as funções de agregação em conjunto com ele mas não para por aí não você pode selecionar quem você pode agrupar um exemplo disso vai vir aqui agora eu tenho select carga continha o nome foi um curso o grupo vai cargo exatamente o que tinha antes isso vai gerar aquele resultado que a gente viu antes ele vai selecionar quando as cargas são vai agrupar e vai totalizar só que eu quero é o seguinte eu não quero mostrar todos eu quero mostrar os agrupados somente quem tem heaven o counter nome maior que 3 então por exemplo ali eu tenho um curso com 51 curso com 30 um curso com 10 um curso com 20 mas eu tenho seis cursos com 40 eu quero mostrar somente quem tem o contador maior que 3 então só vou mostrar quem tem 40 horas eu tenho seis cursos e aí deu pra entender ficou confuso vamos diretamente com o ambiente e esse martelo não me deixa vocês perceberam que agora tem uma furadeira também eu estou tentando ignora eu já limpei aqui vamos dar um select asterístico from cursos têm todos esses cursos vão agrupar por exemplo por ano o grupo bae ano a mostrar aqui o ano e o county register stico olha só vamos ordenar aqui ordem by renault master está pra você ordenar também por uma coluna que ó então em 2021 tem dois cursos em 2010 dois cursos onde tive mais curso a 2017 com oito cursos você quiser inverso você pode botar 10 que aqui ele vai te mostrar do maior para o menor então em 2017 foi onde eu fiz ou farei será que é verdade isso não sei mais cursos com oito 2018 com 5. 016 com 4 e assim sucessivamente e se eu quiser agrupar somente quem tem esse contador acima de 5 por exemplo contando 5 eu quero ver só isso aqui ó eu quero saber quais os anos eu tenho maior incidência de cursos então eu vou fazer o seguinte aqui ó heaven o counter ano maior ou igual a 5 contra o inter lá ele me selecionou em vez de mostrar todo seu só agrupei quem tem o carro deste ano maior ou igual a 5 o heaven para o grupo bayer é mais ou menos semelhante ao é o select e uma coisa importante dentro do heaven você só pode trabalhar com o cão o que você acha grupo ficou confuso ct dar um exemplo então eu agrupei por ano e eu não posso por exemplo mostrar nesse ano todo mundo que tem sei lá o total de aulas maior do que 30 se eu pudesse comando ele vai mostrar um erro aqui dizendo que ele não conhece o ano com volume total las em heavy cross então ele não conhece o trote aulas porque você não há grupo por eles mas se você quiser saber por exemplo eu quero agrupar por ano que tenha o ano maior do que sei lá 2013 ele também vai mostrar todo mundo que tem um ano somente acima de 2013 e que não têm os anos anteriores não tenham por exemplo votar 2016 aqui realmente que seja maior 2016 ele me mostrou somente eles não me mostram anterior então o heaven ele só funciona se aqui eu colocar o campo que eu utilizei diretamente no grupo vai mas nada impede que você utilizar outro campo aqui ó por exemplo com o é não quero selecionar ó onde o total de aulas foi maior do que 30 por exemplo ele vai agrupar aquele não mostrou nenhum maior que 2013 agora eu tenho o que eu estou fazendo aqui estou selecionando os anos da tabela de cursos onde o total de aulas seja acima de 30 só quero selecionar esses vou agrupar essa seleção por ano e dentro desse agrupamento eu só vou mostrar quem tem ano acima de 2013 ordenado pelo total aqui deu pra entender você pode selecionar filtrar agrupar e dizer dentro desse grupamento qual você quer exibir aí você usa o select o é o grupo bae e o heaven se isso se torna confuso pra você você precisa praticar um pouco mais eu trouxe quatro exercícios aqui pra você fazer no finalzinho da aula mas antes eu tenho que mostrar uma coisa bem legal você pode juntar tudo aqui desse jeito você pode juntar mais ainda por exemplo aqui ó responder essa janela de baixo é só você clicar aqui no cantinho né fazer o seguinte aqui ó select avg carga from cursos que ele vai fazer aqui ele vai mostrar média de horas dos cursos então o que eu fiz aqui o valor que foi exibido foi 36. 3 isso significa de todos os cursos que eu tenho ele somou todas as cargas e dividir pelo número de cursos e mostrou seu valor então em média os meus cursos que eu lancei até hoje tem 36 horas de duração agora vou fazer outros electric select asterisco concursos o é lá ano maior do que 2013 mandei mostrar aqui todos os campos de quem dos cursos que foram feitos depois de 2003 2013 não não vai dar muito 2015 não tenho alguns cursos aqui todos eles feitos depois de 2015 posso vir aqui e agrupar por carga por exemplo então eles vão ficar agrupados por cada quero mostrar a carga e o counter isso é de cursos acima de 2015 eu tenho dois cursos com 20 horas sete cursos com 30 horas e por aí vai mas se por exemplo se eu quiser dessa listagem mostrará apenas os cursos que têm horas acima da média de horas de todos os cursos ficou claro que estou falando olha só eu tenho a média de horas 36.
6 eu quero mostrar essa listagem somente os cursos que têm a carga acima dessa média é claro que eu posso vir calcular 36. 6 vir aqui fazer o meu select utilizando 36. 6 mas seu cadastro de novos cursos ea média mudar toda hora vou ter que ir lá ficar calculando a média para depois mudar o meu select não precisa pequeno gafanhoto você pode juntar um selecto no outro e é isso que vou te mostrar agora então eu quero selecionar todos os cursos que tenham ano acima de 2015 vou agrupar por carga mas eu só quero mostrar quem tem a carga percebe o heaven está utilizando o mesmo campo do grupo vai acima de 36 pontos seis só que se eu botar 36 pontos aqui ea média de cargas mudar eu vi vou ter que vir aqui toda hora e modificar então eu vou fazer o seguinte vou botar um parêntese aqui dentro vou vir aqui ó copiar e select inteiro control c eu vim aqui dentro contra o v isso é eu estou selecionando a carga eo total de horas dos cursos onde o ano seja acima de 2015 vou agrupá los por carga exatamente como estou fazendo aqui mas eu não quero mostrar quem tem carga baixa eu quero mostrar somente quem está acima da carga então por exemplo sem a carga 36.
5 esses caras aqui ó não vão aparecer vai aparecer somente esses três aqui de baixo será que vai acontecer vamos dar contra o enter ela ele só me mostrou aqueles três de baixo isso é eu selecionei phil trey agrupei e mostrei desse agrupamento somente quem está acima do resultado de outros select oi meu querido isso é confuso se você não entendeu direito a assistir aula de novo essa aula não é pra assistir uma vez só essa é uma aula daquelas que você tem que assistir mais uma vez tem que estar com o computador ligado não adianta ficar a meu deus eu não estou entendendo nada demais que 'ele não vai entender meu querido se você não botar a mão na massa não tirar essa mãe do seu queixo e botar a mão na massa você não vai entender isso é complicado sim é confuso é mas é legal pra então eu tentando demostrar é que o comando select é poderosíssimo você pode unir um com o outro juntar utilizam select dentro de outro ele é poderoso e volto a dizer não vou ter como ensinar tudo que o select faz até porque senão seria o curso em vídeo de select mas concorda comigo que eu te mostrando é muito mais do que muito curso é que você faz inclusive os pagos então pra exemplificar para exercitar aquilo que você aprendeu nessa aula vamos a quatro exercícios que eu separei caprichados aqui pra você vamos então exercitar como sempre estamos fazendo nas últimas aulas e o primeiro exercício é o seguinte eu quero uma lista com as profissões dos gafanhotos e seus respectivos quantitativos então eu fiz uns elektra tabela de cursos agora você vai trabalhar com a tabela de gafanhotos eu quero uma lista com todas as profissões e seus respectivos quantitativos então por exemplo eu quero saber dentro dos gafanhotos cadastrados quantos são programadores quantos são analistas quanto são professores e assim sucessivamente essa é fácil né então ó pausa o vídeo abre seu ambiente importa base de dados já ensinei a fase antes nos nas aulas anteriores e prática senão não vai adiantar o que eu sempre vou te pedir o seguinte prática faz quatro exercícios e coloca a resposta aqui nos comentários vamos fazer a troca de informações entre gafanhotos vamos ver quem acerta quem erra quem não entendeu o gabarito vai tá aqui embaixo não sou eu que vou botar são os próprios gafanhotos então não confie 100% você ler pratique e vez está funcionando o segundo exercício é um pouquinho mais complexo mas mesmo assim é fácil eu quero saber quanto de gafanhotos homens e quantos gafanhotos mulheres nasceram após 1º de janeiro de 2005 então o seguinte eu quero primeiro saber quantas pessoas nasceram acima de 1º de janeiro de 2005 e select é fácil de fazer depois eu quero agrupá los por sexo e ver quantos homens enquanto as mulheres nasceram atendendo a essa expectativa que de ter nascido após dia 1º de janeiro de 2005 essa também é moleza vamos melhorar um pouquinho mais mas nunca se esqueça pause e faço exercício dois não deixa para ouvir três agora não eu tô esperando talvez aí e agora que você fez eu espero que você tenha feito vamos ao terceiro exercício o terceiro é um pouco mais complexo eu quero uma lista com os gafanhotos que nasceram fora do brasil mostrando o país de origem eo total de pessoas nascidas lá vão parar por aqui olha só eu não quero quem mora no brasil então eu quero selecionar quem está fora do brasil eu expliquei isso também nas aulas de operadores e aí eu quero uma lista de países de origem e quantas pessoas moram lá eu quero saber quantas pessoas moram no canadá quantas pessoas moram nos estados unidos quando as pessoas morrem em moçambique quantas pessoas moram no congo então sim eu quero saber quantas pessoas moram em cada um dos países que não sejam brasil não quero saber quantas pessoas moram no brasil e ainda tem um adicional só nos interessam os países que tiverem mais de 3 já foi outros com essa nacionalidade então por exemplo se eu pegar japão tiver só dois gafanhotos eu não quero mostrar japão eu quero mostrar somente os países que tenham mais de 3 na ou três ou mais pessoas morando lá e aí esse é um pouco mais complexa faça o seu exercício paulo o vídeo e vamos pro quarto anunciado que eu parei pra você agora que você já fez o terceiro eu espero que sim vamos ao quarto exercício que é o mais complicado hein mas você consegue fazer o que o enunciado é o seguinte eu quero uma lista agrupado pela altura dos gafanhotos mostrando quantas pessoas peçam mais de 100 quilos e que estão acima da média de altura de todos os cadastrados calma calma não se joga pela já volto aqui não se joga pela janela presta atenção em primeiro lugar você vai ter que saber qual é a média de altura de todos os gafanhotos eu te ensinei a calcular esta média 1 salete pequeninho reserva desse select aí você vai pegar em outros select todas as pessoas que pesam mais de 100 quilos vai agrupar eles por altura mas eu não quero mostrar todo mundo eu quero mostrar só quem tem esse peso acima de 100 e que está acima da média de altura que a gente calculou no início deste exercício difícil não é você vai conseguir eu garanto se você não conseguir assistir essa aula de novo com calma praticando e aí você vai conseguir então é isso que quero gafanhoto chegamos ao fim de mais uma aula falando sobre como o select uma aula caprichada convenhamos então se você achou a caprichada nunca se esqueça de curtir mostrar para as pessoas nas suas redes sociais olha só eu vou te pedir um favor não compartilha só essa aula não se você compartilha essa aula as pessoas que não conhecem não falar tanto esse cara não fala um monte de coisa maluca muito difícil não gostei desse curso compartilha a playlist do curso completo que é muito mais legal então dar essa ajuda e procura em vídeo a gente está precisando de um atalho que ó se você utilizar esse atalho aqui você vai diretamente para playlist com todas as aulas banco de dados então compartilhe essa url aqui se não tiver não deve clicar aqui tudo mas você vendo na descrição desse vídeo tem uma url encurtada para isso compartilhe esse link nas redes sociais ajuda a gente a gente está precisando e o curso de banco de dados está bem caprichado com certeza você tá mostrando essas aulas para muita gente mas como sempre no final da aula eu queria te pedir a agora tenha uma furadeira e me ajudando a canal clicando aqui ó viu que maravilha então clique aqui e se inscreva no canal seja mais um dos principais garanhões desse país olha aqui ó essa é a primeira aula que eu tô gravando lembro que falei no curso em vídeo responde vamos ver quanto tempo vai demorar para aparecer aqui ó essa é a primeira aula queria agradecer aqui ó a todo mundo dos 100 mil inscritos do canal essa é a aula que eu tô gravando aqui e você pode clicar aqui ou se inscrevendo você pode fazer parte desse grupo aqui e fazer a gente aumentar essa placa é a placa de 100.