Consulta SQL: Como contar a frequência sobre uma relação muitos para muitos?
-
26-09-2019 - |
Pergunta
Eu tenho uma tabela para posts do blog e uma tabela para tags, com uma relação muitos para muitos entre eles.
Como posso extrair a tag mais frequente em um subconjunto de posts do blog? (por exemplo, apenas os do ano passado) Existe uma maneira de extrair as frequências de todas as tags associadas ao subconjunto do blog Posts?
Obrigado
EDIT: Meu esquema:
CREATE TABLE `tag` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` varchar(200) NOT NULL,
`access` varchar(1),
`linked_created` datetime
)
;
CREATE TABLE `blogpost_tags` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`blogpost_id` integer NOT NULL,
`tag_id` integer NOT NULL,
UNIQUE (`blogpost_id`, `tag_id`)
)
;
CREATE TABLE `blogpost` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`title` varchar(50),
`body` varchar(500)
)
;
Solução
(Agora que o esquema foi fornecido, removeu meu esquema de amostra e acabei de publicar a consulta)
Select T.name, Count(*) As UseCount
From Tag As T
Join BlogPost_Tag As BPT
On BPT.tag_Id = T.Id
Join BlogPost As BP
On BP.Id = BPT.blogpost_id
Where BP.Title Like '...'
Group By T.name
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow