6 consultas no MySQL úteis para o dia a dia de nossos softwares.

Nós sabemos que no MySQL, podemos montar praticamente qualquer tipo de retorno de informação a partir de seus dados armazenados em suas tabelas, em forma de registros (ou tuplas).
Podemos fazer consultas SELECT com JOIN, WHERE, HAVING para mudar o escopo do resultado de linhas específicas, usar GROUP BY para combinar resultados, UNION para combinar múltiplas queries.
Mas também existem casos em que precisamos retornar alguma informação mais comum, utilizada mais frequentemente em nossos sistemas. Vamos descrever a partir de agora 6 consultas no MySQL úteis para o dia a dia de nossos softwares.

1 - Idade em anos
Você tem uma data de aniversário e precisa calcular quantos anos o usuário tem. Assume que @dateofbirth é a data:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0; 
 
2 - Diferença entre duas datas
Encontre a diferença entre dois valores de datas em segundos, minutos, horas e dias. Se dt1 e dt2 são valores do tipo datetime na forma "yyyy-mm-dd hh:mm:ss', o numero de segundos entre dt1 e dt2 é

UNIX_TIMESTAMP( dt2 ) - UNIX_TIMESTAMP( dt1 )

Para pegar o número de minutos, divida o resultado por 60, para o número de horas, divida por 3600 e para pegar a quantidade de dias, divida por 3600 * 24.
3 - Exiba valores que ocorrem X vezes em uma coluna
SELECT id
FROM tbl
GROUP BY id
HAVING COUNT(*) = N; 

4 - Quantidade de dias úteis entre duas datas
SELECT COUNT(*)
FROM calendar
WHERE d BETWEEN Start AND Stop
  AND DAYOFWEEK(d) NOT IN(1,7)
  AND holiday=0; 
  
5 - Encontre a chave primária da tabela

SELECT k.column_name
FROM information_schema.table_constraints t
JOIN information_schema.key_column_usage k
USING (constraint_name,table_schema,table_name)
WHERE t.constraint_type='PRIMARY KEY'
  AND t.table_schema='db'
  AND t.table_name='tbl'

6 - Veja o tamanho de seu banco de dados

SELECT
  table_schema AS 'Db Name',
  Round( Sum( data_length + index_length ) / 1024 / 1024, 3 ) AS 'Db Size (MB)',
  Round( Sum( data_free ) / 1024 / 1024, 3 ) AS 'Free Space (MB)'
FROM information_schema.tables
GROUP BY table_schema ; 

Pronto pessoal. Espero que tenham gostado do artigo. 

Até a próxima. 

Artigo traduzido de CodeForest.

Comentários