Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

danicarla

Consulta com Group By e Count em outra tabela

Recommended Posts

Olá pessoal, tudo bom? Tenho uma tabela de região e outra de times...
Preciso fazer uma consulta pra exibir quantos times eu tenho por região, minhas tabelas estão assim:


tabela regioes

id  regiao    cidade
1   Amarela   São Paulo
2   Amarela   Guarulhos
3   Amarela   Osasco
4   Amarela   Santos
5   Verde     São Paulo
6   Verde     Santos
7   Azul      Santos
8   Azul      Jundiai
9   Azul      Guarulhos


Tabela times

id  id_regiao  time
1   3          America
2   5          Bufalos       
3   2          Futebol 7
4   8          Bar sem lona
5   7          Inter de Limão
6   1          Atletico Maneiro
7   3          Baile de Monique
8   2          Barra Leverkusen
9   2          Piritubense


A minha consulta até retorna as regiões, mas aparece o numero de times como zero, minha consulta está assim:

SELECT DISTINCT regiao,
       (SELECT COUNT(id) FROM times
        WHERE times.id_regiao = regioes.id) AS Total
FROM regioes
GROUP BY regiao


Será que podem me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria isto?:

 

SELECT regiao, COUNT(`time`) AS qtd_equipas
FROM regioes JOIN times
ON regioes.id = times.id_regiao
GROUP BY regiao;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sua consulta deu certo em partes rsrsrs
Ele não lista a região que não tem nenhum time.... e eu precisaria que aparecesse com zero times...
Eu alterei o JOIN para LEFT JOIN e funcionou mas se eu colocar algum WHERE na tabela dos times ele também não exibe as regiões que não possuem nenhum time 
 

SELECT regiao, COUNT(`time`) AS qtd_equipas
FROM regioes LEFT JOIN times
ON regioes.id = times.id_regiao
WHERE times.numero_jogadores>11
GROUP BY regiao

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu consegui fazer assim, mas a consulta ficou muito pesada e demorada

SELECT p.regiao, 
   (SELECT COUNT(a.id) FROM times AS a 
   INNER JOIN regiao AS e ON e.id=a.id_regiao
   WHERE a.numero_jogadores>11 AND e.regiao=p.regiao) AS quant
FROM regioes AS P
WHERE p.cidade='São Paulo' GROUP BY p.região

 

Fica mais rápido eu fazer uma consulta agrupando por bairro e dentro do while do php fazer outra consulta pra contar a quantidades de times do que usar essa consulta que fiz ai em cima
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Em 10/01/2018 at 15:14, danicarla disse:

A sua consulta deu certo em partes rsrsrs
Ele não lista a região que não tem nenhum time.... e eu precisaria que aparecesse com zero times...
Eu alterei o JOIN para LEFT JOIN e funcionou mas se eu colocar algum WHERE na tabela dos times ele também não exibe as regiões que não possuem nenhum time 
 


SELECT regiao, COUNT(`time`) AS qtd_equipas
FROM regioes LEFT JOIN times
ON regioes.id = times.id_regiao
WHERE times.numero_jogadores>11
GROUP BY regiao

 

coloca um OR dentro do where

WHERE times.numero_jogadores>11 OR qtd_equipas = 0

saída será as regiões com número de jogadores acima de 11 e as regiões onde o count será zero

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por lucianfpaula
      Galera tenha a seguinte duvida, tenho 3 tabelas onde estou trazendo os dados e preciso fazer um count em uma delas
       
      SELECT *  FROM tabela1 AS t1  INNER JOIN tabela2 AS t2 ON t1.idt1 = t2.idt2 INNER JOIN tabela3 AS t3 ON t3.idt3 = t1.idt1  
      a duvida é: quero manter o SELECT * mas também preciso de COUNT(t3.idT3)
      não sei se é possível fazer isso, mas gostaria de ter certeza antes de focar em outra solução
      desde já muito grato.
    • Por lezão
      Boa noite!
      Td bem com vcs?
      Estou usando esse código mas não retorna nada!
       
      Alguém pode me ajudar ?
       
       
      <?php $sql = mysqli_query($link, "SELECT ver_post, COUNT(ver_post) AS Quantidade FROM tab_comentarios where ver_post = 'red' Group by ver_post"); ?> Variável
      <?php echo $Quantidade; ?>  
    • Por marsolim
      galera tô tentando fazer uma classificação aqui junto com um sum e não to conseguindo. até o momento consigo gerar a tabela de desempenho assim
       
         $sql = "SELECT *,SUM(pontos_total) AS totais FROM desempenho INNER JOIN usuarios ON usuarios.id = desempenho.id_usuario GROUP BY id_usuario ORDER BY totais DESC";     if($res = mysqli_query($con, $sql)){         while($row = mysqli_fetch_assoc($res)){             echo $row["nome"] . " - " . $row["totais"] . "<br>";         }     }  
      ok isso me gera uma tabela como segue
       
      jean claude van damme - 152
      bruna marquezine - 149
      bruce willis - 131
      ...
       
      o que não to conseguindo é incluir um contagem pra saber em que posição a pessoa está por exemplo se a bruna marquezine logar no sistema deve aparecer pra ela
       
      Sua pontuação: 149
      Sua posição: 2
       
      to tentando incluir uma clausula pra contar os totais maiores ou iguais ao do usuário logado e assim a quantidade de registros que retornar é a posição da pessoa.
       
      detalhe pertinente: totais é uma soma de vários subtotais espalhados pela tabela em nome de cada usuario tipo
       
      nesse cenario temos como soma dos pontos totais
       
      1 - 8
      2 - 13
      3 - 3
      4 - 7
      5 - 2
       
      alguma ideia de como posso pegar a posição apenas alterando o sql?
    • Por Alberto Nascimento
      Tenho o seguinte código que faz a consulta e contagem de todos os campos de uma tabela e retorna a quantidade através de ECHO.
      Porém preciso que tenha dois critérios a seguir para então contar:
      <?php $servidor = ""; $usuario = ""; $senha = ""; $dbname = ""; $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); if(!conn) { echo "Error"; } $sql="SELECT count(id) AS total FROM tbl_test"; $result=mysqli_query($conn,$sql); $values=mysqli_fetch_assoc($result); $num_rows=$values['total']; echo $num_rows; ?> Só que preciso que primeiro encontre todos os registros que tiverem o nome "ALBERTO" no campo NOME e logo em seguida faça a contagem dos registros de acordo com o campo SITUACAO .
      Ficaria desta forma a ser exibido:
       
       
      Obrigado !!
    • Por biakelly
      Oi, criei uma função para contar uma coluna específica:
       
      function contando-usuarios() { global $conn, $db-nativas; $sql = "SELECT COUNT(*) FROM $tabela-nativa WHERE ID = '" . ['$contaenfermeiras'] . "'"; if ($result = mysqli_query($conn, $sql)) { if (mysqli_num_rows($result) >= 1) { $row = mysqli_fetch_row($result); return $row['$contaenfermeiras']; } } }  
       
      Ao chamar no index desta forma:
       
      <?php echo ($contaenfermeiras);?>  
      Gera erro:  Notice: Undefined variable: contaenfermeiras in C:\xampp\htdocs\hosp\index.php on line 5
       
      A linha 5 é a chamada: <?php echo ($contaenfermeiras);?>

      To fazendo algo errado? Como chamo corretamente?
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.