Preciso de ajuda para escrever uma consulta para analisar dados de tráfego do site a partir de uma serp_analytics
tabela. A estrutura da tabela é a seguinte:
coluna | tipo |
---|---|
palavra-chave_id | interno |
local na rede Internet | varchar |
est_traffic | interno |
data | data hora |
Meu objetivo é calcular o "Share of Voice" diário do meu site ('youtube.com') e identificar os 3 principais sites concorrentes com base em seu share of voice. A análise deve abranger um intervalo de datas específico, fornecido como :start
parâmetros :end
.
Requisitos Específicos:
Calcular a participação diária de voz: preciso calcular a participação diária de voz para 'youtube.com'. A participação de voz é calculada como a soma de
est_traffic
'youtube.com' em um determinado dia, dividida pelo totalest_traffic
de todos os sites naquele dia, multiplicado por 100.Identifique os três principais concorrentes: com base na participação de voz na
:end
data, determine os três principais sites (excluindo 'youtube.com'). Esses principais concorrentes devem ser incluídos na produção de cada dia no intervalo de datas especificado.Estrutura de saída: A saída desejada é um formato estruturado onde cada entrada corresponde a um site, incluindo 'youtube.com' e os 3 principais concorrentes. Cada entrada deve listar a participação diária de voz para o intervalo de datas. Se um site não tiver dados em um determinado dia, sua participação de voz deverá ser mostrada como 0.
Cobertura completa de datas: a saída deve incluir todas as datas no intervalo entre
:start
e:end
. Se não houver dados de um site em uma data específica, o share of voice para essa data deverá ser 0.
Aqui está um exemplo de conjunto de dados:
| keyword id | website | est_traffic | date |
|------------|--------------|-------------|------------|
| 1 | google.com | 10 | 2023-12-22 |
| 1 | facebook.com | 20 | 2023-12-22 |
| 1 | youtube.com | 5 | 2023-12-22 |
| 1 | twitter.com | 40 | 2023-12-22 |
| 1 | linkedin.com | 50 | 2023-12-22 |
| 1 | google.com | 30 | 2023-12-23 |
| 1 | facebook.com | 20 | 2023-12-23 |
| 1 | youtube.com | 5 | 2023-12-23 |
| 1 | twitter.com | 10 | 2023-12-23 |
| 1 | linkedin.com | 15 | 2023-12-23 |
Com base nisso, a saída para 'youtube.com' entre as datas 2023/12/22 e 2023/12/23 deve ser semelhante a esta:
[
{
"domain": "youtube.com",
"share_of_voice": [
{"date": "2023-12-22", "value": 4},
{"date": "2023-12-23", "value": 6.25}
]
},
// Entries for top 3 competitors
{
"domain": "google.com",
"share_of_voice": [
{"date": "2023-12-22", "value": 8},
{"date": "2023-12-23", "value": 37.5}
]
},
{
"domain": "twitter.com",
"share_of_voice": [
{"date": "2023-12-22", "value": 32},
{"date": "2023-12-23", "value": 12.5}
]
},
{
"domain": "linkedin.com",
"share_of_voice": [
{"date": "2023-12-22", "value": 40},
{"date": "2023-12-23", "value": 18.75}
]
},
]
Se não for possível obter a saída no formato acima, retorne qualquer coisa que realmente não importe, desde que tenha todos os dados.
Agradeço antecipadamente por sua ajuda!
Alguns comentários estão no comunicado.
O resultado (com alguns campos adicionais apenas para visualização de cálculos intermediários) é:
com base na minha compreensão do texto acima
primeira solução
SELECT sum(est_traffic)*100.0/(SELECT sum(est_traffic) FROM serp_analytics WHERE data ENTRE d1 E d2) FROM serp_analytics WHERE data ENTRE d1 E d2 AND website = 'youtube.com'
segunda solução
SELECT website, sum(est_traffic)*100.0/(SELECT sum(est_traffic) FROM serp_analytics WHERE date BETWEEN d1 AND d2) AS share_of_voice FROM serp_analytics WHERE date BETWEEN d1 AND d2 group BY website ORDER BY share_of_voice DESC LIMIT 3