Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

Alternativa

Essa foi minha resposta ao exercício:

select c.nome, count(m.id) from curso c
    -> join matricula m on m.curso_id = c.id
    -> where m.tipo in ('PAGA_PF', 'PAGA_PJ')
    -> group by c.nome;

Esse foi o resultado:

+---------------------------------+-------------+
| nome                            | count(m.id) |
+---------------------------------+-------------+
| Desenvolvimento web com VRaptor |           1 |
| Scrum e métodos ágeis           |           1 |
| SQL e banco de dados            |           2 |
+---------------------------------+-------------+
3 rows in set (0.00 sec)

Eu imaginei que uma alternativa seria juntar o "in" com o "like", tentei um "like in" (rsrs), não deu certo, pesquisei no google e encontrei isso:

https://stackoverflow.com/questions/1127088/mysql-like-in

"...A REGEXP might be more efficient, but you'd have to benchmark it to be sure, e.g..."

O resultado foi essa query:

select c.nome, count(m.id) from curso c
    -> join matricula m on m.curso_id = c.id
    -> where m.tipo regexp 'PF|PJ'
    -> group by c.nome;

Que gerou o mesmo resultado:

+---------------------------------+-------------+
| nome                            | count(m.id) |
+---------------------------------+-------------+
| Desenvolvimento web com VRaptor |           1 |
| Scrum e métodos ágeis           |           1 |
| SQL e banco de dados            |           2 |
+---------------------------------+-------------+
3 rows in set (0.00 sec)
2 respostas
solução!

Boa noite Jonas,

Creio que o REGEXP é uma boa alternativa ao seu problema, pois ele tem algo próximo ao LIKE e, como você usa nele uma expressão regular, pode criar grupos, que seria algo mais próximo do IN.

Fazendo o "PJ|PF", você criou algo próximo do OR. E também algo como LIKE IN('%PJ%', '%PF%') (caso o LIKE IN existisse).

Espero tê-lo ajudado.

Abraço.

Boa tarde Rafael! Obrigado pela resposta! Abraço!