segunda-feira, 25 de janeiro de 2010

Gráficos em SQL

Produzir gráficos com poucos recursos é uma das diversões matemáticas mais interessantes. Com SQL, pode parecer até impossível. Mas depois que vi uns desenhos natalinos no Explain Extended, resolvi tentar.

Resolvi começar com um objetivo bem simples: criar um gráfico de barras. Comecei com duas consultas: um de 100 linhas para representar porcentagens e outra com os valores que quero mostrar.

A de porcentagens é simples:

select rownum as pct
from usuarios
where rownum<100

E a de dados deve retornar apenas uma linha. A consulta abaixo compara o número de usuários que têm senha com os que ainda não têm:

select sum(case when senha is null then 1 else 0 end) as coluna1,
sum(case when senha is not null then 1 else 0 end) as coluna2
from usuarios

Para fazer um gráfico de barras, só preciso juntar as duas. Posso fazer um cross-join, porque uma delas só tem uma linha mesmo. No exemplo abaixo, reduzi o número de linhas para 10:

select pct,
(case when coluna1/(coluna1+coluna2)<pct then ' ' else '*' end),
(case when coluna2/(coluna1+coluna2)<pct then ' ' else '*' end)
from (
select sum(case when senha is null then 1 else 0 end) as coluna1,
sum(case when senha is not null then 1 else 0 end) as coluna2
from usuarios) dados,
(select rownum/10 as pct
from usuarios
where rownum<10) linhas
order by pct desc

E o resultado é:

0,9
0,8
0,7
0,6 *
0,5 *
0,4 *
0,3 * *
0,2 * *
0,1 * *

Só falta achar uma utilidade para isso!

Nenhum comentário: