【发布时间】:2021-01-12 00:44:59
【问题描述】:
我正在使用 ClickHouse,我希望按 field1(关键字)对数据进行分组,并在其他字段中显示 uniq url 以及每个 URL 的点击总和值(其他字段),
原始数据
keyword | URL | clicks | impression| position| ctr
------------------------------------------------------------------------------------------------
kw1 | https://mydomain.dev/url1.html | 10 | 100 | 2 | **0,10**
kw1 | https://mydomain.dev/other-url2.html | 20 | 434 | 3 | 0,05
kw1 | https://mydomain.dev/url3.html | 30 | 345 | 4 | 0,09
kw1 | https://mydomain.dev/url1.html | 10 | 40 | 5 | 0,25
kw1 | https://mydomain.dev/other-url2.html | 22 | 42 | 6 | 0,52
kw1 | https://mydomain.dev/other-url2.html | 23 | 43 | 7 | 0,53
Kw2 | https://mydomain.dev/other-url-data-a | 435 | 3243 | 1 | **0,13**
Kw2 | https://mydomain.dev/other-url-data-b | 34 | 43 | 4 | 0,79
Kw2 | https://mydomain.dev/other-url-data-c | 23 | 433 | 7 | 0,05
Kw2 | https://mydomain.dev/other-url-data-b | 232 | 343 | 13 | 0,68
Kw2 | https://mydomain.dev/other-url-data-a | 23 | 232 | 14 | 0,10
Kw2 | https://mydomain.dev/other-url-data-d | 3 | 34 | 15 | 0,09
Kw2 | https://mydomain.dev/other-url-data-d | 23 | 345 | 16 | 0,07
Kw2 | https://mydomain.dev/other-url-data-c | 2 | 43 | 17 | 0,05
以及想要的结果:
- 从每个 kw 的最佳位置获取 ctr(粗体)
- 对 uniq url 进行分组,并按 url 汇总点击次数和展示次数
分辨率
KW, | URL clicks : impressions Cli:Impr| otalclicks | TotalUmp |average | ctr |best_position_by_kw
--------------------------------------------------------------------------------------------------------------------------------
kw1 | https://mydomain.dev/url1.html 20:140 | 115 | 1004 |3,62 | 10,00% | 2
| https://mydomain.dev/other-url2.html 65:519, | | | | |
| https://mydomain.dev/url3.html 30:345 | | | | |
-------------------------------------------------------------------------------------------------------------------------------
kw2 | https //mydomain.dev/other-url-data-a 667:3475| 775 | 4716 |4,43 | 13,41% | 1
https //mydomain.dev/other-url-data-b 266 386 | | |
https //mydomain.dev/other-url-data-c 25 379 | | |
https //mydomain.dev/other-url-data-d 26 476 | | |
表格和数据:
主表
CREATE TABLE users_data
(
`fecha` Date,
`consulta` String,
`landing` String,
`clicks` UInt32,
`impresiones` UInt32,
`posicion` Float32,
`ctr` Float32,
`dispositivo` String,
`pais` String
)
ENGINE = MergeTree(fecha, landing, 8192)
Table from file 获取“Grupo”字段,我只需要这个表的组(用于对相似的 kws 进行分组)
SELECT
consulta,
any(Grupo) AS Grupo
FROM
file('kw-2020.csv',
'CSVWithNames',
'fecha Date, consulta String, landing String, clicks UInt32, impresiones UInt32, posicion Float32, ctr Float32, dispositivo String, pais String,Grupo String')
GROUP BY
consulta
用户数据数据:
INSERT INTO table_name (fecha,consulta,landing,clicks,impresiones,posicion,ctr,dispositivo,pais) VALUES ('2020-06-22','electricidad presupuestos electricos ejemplos','https://mydomain.dev/directory/ld-domain-de-presupuesto-de-elctricidad.php',0,1,7.0,0.0,'MOBILE','chl');
INSERT INTO table_name (fecha,consulta,landing,clicks,impresiones,posicion,ctr,dispositivo,pais) VALUES ('2020-06-22','modelo de carta de recomendacion laboral peru','https://mydomain.dev/directory/ld-domain-de-carta-de-662.php',0,1,5.0,0.0,'DESKTOP','per');
INSERT INTO table_name (fecha,consulta,landing,clicks,impresiones,posicion,ctr,dispositivo,pais) VALUES ('2020-06-22','carta de ofrecimiento de servicios a una empresa','https://mydomain.dev/directory/ld-domain-carta-para-ofrecer-servicios.php',0,3,1.0,0.0,'DESKTOP','slv');
INSERT INTO table_name (fecha,consulta,landing,clicks,impresiones,posicion,ctr,dispositivo,pais) VALUES ('2020-06-22','ejemplo de estrofa','https://mydomain.dev/directory/ld-ejemplo-de-estrofa.php',0,1,28.0,0.0,'DESKTOP','nld');
INSERT INTO table_name (fecha,consulta,landing,clicks,impresiones,posicion,ctr,dispositivo,pais) VALUES ('2020-06-22','carta de intención de servicios profesionales','https://mydomain.dev/directory/goto-domain-de-carta-de-384.php',0,1,5.0,0.0,'DESKTOP','mex');
INSERT INTO table_name (fecha,consulta,landing,clicks,impresiones,posicion,ctr,dispositivo,pais) VALUES ('2020-06-22','ejemplos de presupuesto base cero','https://mydomain.dev/directory/ld-domain-de-presupuesto-base-cero.php',0,1,92.0,0.0,'DESKTOP','mex');
INSERT INTO table_name (fecha,consulta,landing,clicks,impresiones,posicion,ctr,dispositivo,pais) VALUES ('2020-06-22','como se hace una carta de recomendacion','https://mydomain.dev/directory/ld-domain-de-carta-de-662.php',0,1,77.0,0.0,'DESKTOP','twn');
INSERT INTO table_name (fecha,consulta,landing,clicks,impresiones,posicion,ctr,dispositivo,pais) VALUES ('2020-06-22','carta de oferta de productos a clientes','https://mydomain.dev/directory/ld-domain-carta-para-ofrecer-servicios.php',0,1,1.0,0.0,'DESKTOP','esp');
INSERT INTO table_name (fecha,consulta,landing,clicks,impresiones,posicion,ctr,dispositivo,pais) VALUES ('2020-06-22','investigación hemerográfica','https://mydomain.dev/directory/ld-ejemplo-de-ficha-hemerogrfica.php',0,1,44.0,0.0,'DESKTOP','rus');
INSERT INTO table_name (fecha,consulta,landing,clicks,impresiones,posicion,ctr,dispositivo,pais) VALUES ('2020-06-22','carta de intención de servicios profesionales','https://mydomain.dev/directory/goto-domain-de-carta-de-384.php',2,6,2.0,0.0,'DESKTOP','col');
文件中的数据
"grupo" | "consulta"
-----------------------------------------------------------
pedido | carta de pedido ejemplo
carta | carta de ofrecimiento de servicios a una empresa
carta | carta de intención de servicios profesionales
pedido | carta de pedido
carta | carta de oferta de productos a clientes
carta | carta de intención de servicios profesionales
pedido | carta de pedido ejemplo
carta | carta de presentacion a una empresa ofreciendo servicios
otros | rescisión de contrato modelo
pedido | carta de pedidos ejemplos
carta | carta de presentacion de empresas de servicios
carta | carta solicitando beca universitaria
pedido | carta comercial de pedido
carta | carta a clientes para ofrecer servicios
otros | casilla 99 modelo 390
pedido | carta de pedido
carta | carta de oferta de servicios
carta | carta de intencion de renta
pedido | carta de pedido
carta | carta de ofrecimiento de productos
otros | contrato de leasing modelo
pedido | carta de pedidos
carta | carta de presentacion de empresa de servicios
otros | rescisión de contrato modelo
pedido | carta de pedidos
carta | carta de presentacion de empresa para ofrecer productos
carta | modelo de carta de intencion academica
pedido | carta de solicitud de pedido
carta | carta de presentacion de servicios
otros | modelo de solicitud para beca de estudios
pedido | carta de solicitud de pedido
carta | carta de presentacion de servicios
otros | anexo ampliacion contrato de arras
carta | carta de solicitud de un producto
carta | carta para ofrecer servicios
otros | modelo de rescisión de contrato
pedido | carta comercial pedido
carta | carta a clientes para ofrecer servicios
otros | formato de rescisión de contrato de compraventa de inmueble
pedido | carta de anulacion de pedido
carta | carta a clientes para ofrecer servicios
otros | contrato de trabajo para extranjeros en chile
pedido | carta de pedido
carta | carta de ofrecer servicios
otros | modelo de recision de contrato
pedido | carta de pedido
carta | carta de oferta de servicios
otros | formato de rescisión de contrato de prestacion de servicios
pedido | carta de pedido
carta" | carta de ofrecimiento de servicios
我需要: 对于我需要的每个“grupo”(包含许多 kws)
每个组的所有不同的“咨询”字段,以及每个咨询:在组中 -“位置”字段最低的“点击率”值 - 最后日期的“位置”
- 每个不同“顾问”的点击次数和展示次数
- 组中每个咨询的展示次数和点击次数的累积百分比
-所有不同的“着陆”以及“点击次数”和“展示次数”的总和 - 每个网址的展示次数和点击次数的累计百分比
我试过这句话:
SELECT
grupo,
groupUniqArray(consulta) as KWS,
groupUniqArray(landing) as landings,
topK(1)(mediaPonderada)[1] AS PosicionFrecuente,
anyLast(mediaPonderada) AS UltimaPosicion,
varSamp(imp) AS varianza2,
sqrt(varianza2) AS desviacion2,
stddevSamp(imp) AS stdImp2,
count() AS cnt,
groupArray((consulta, imp, clicks2, round((clicks2 * 100) / imp, 3), mediaPonderada)) AS consulta_imp,
arraySum(x -> (x.2), consulta_imp) AS total_imp,
total_imp / cnt AS media,
arraySum(x -> (x.3), consulta_imp) AS total_clicks,
round((total_clicks * 100) / total_imp, 2) AS ctr,
arrayMap(x -> ((100 / total_imp) * (x.2)), consulta_imp) AS percent_imp,
arrayCumSum(percent_imp) AS acc_percent_imp,
consulta_imp[1] AS total_ctr2,
total_ctr2.4 AS ctr2
FROM
(
SELECT
grupo,
consulta,
landing,
quantileDeterministic(0.5)(impresiones, 10) AS detImp,
avg(impresiones) AS medImp,
varSamp(impresiones) AS varMuestraImp,
varPop(impresiones) AS varPobImp,
count() AS cnt,
sum(clicks) AS clicks2,
sum(impresiones) AS imp,
round((clicks2 * 100) / imp, 2) AS ctr,
round((posicion * impresiones) / impresiones, 0) AS mediaPonderada,
arrayMap(2)(x -> round(x, 2), max([round(posicion, 0), clicks, impresiones])) AS arrclicks,
varSamp(impresiones) AS varianza,
avg(impresiones) AS media,
stddevSamp(impresiones) AS stdImp,
stddevPop(impresiones) AS stdPopImp,
sqrt(varianza) AS desviacion,
stdImp / media AS desvMedia
FROM (
SELECT
fecha,
consulta,
landing,
clicks,
impresiones,
posicion,
ctr,
dispositivo,
pais,
Grupo as grupo
FROM
(
SELECT *
FROM GSC_https_Modelode_com2 ghmc
WHERE fecha > '2020-01-01'
) AS t1
LEFT JOIN
(
SELECT
consulta,
any(Grupo) AS Grupo
FROM file('kw-2020.csv', 'CSVWithNames', 'fecha Date, consulta String, landing String, clicks UInt32, impresiones UInt32, posicion Float32, ctr Float32, dispositivo String, pais String,`Raiz semantica` String,Volumen UInt32,clickstream UInt32,cpc Float32,Grupo String')
GROUP BY consulta
) AS t2 USING (consulta)
ORDER BY fecha ASC
)
WHERE (fecha > '2020-06-01')
GROUP BY
grupo,
mediaPonderada,
landing,consulta
ORDER BY
mediaPonderada ASC,
imp DESC
)
GROUP BY grupo
不起作用,url 重复并且不计算点击次数和展示次数
kw |miArr
--------|---------------------------------------------------------------------------------------------------------------------------------
kw1 |['[https://mydomain.dev/url1.html, 2]','[https://mydomain.dev/url1.html, 1]','[https://mydomain.dev/url1.html#alternativas, 0]','
kw2 |['[https://mydomain.dev/url2.html, 1]','[https://mydomain.dev/url2.html, 0]']
【问题讨论】:
-
给我们创建表/插入测试数据,否则你的问题很难理解
-
主体表 CREATE TABLE users_data (
fechaDate,consultaString,landingString,clicksUInt32,impresionesUInt32,posicionFloat32,ctrFloat3 987654336@ String,paisString ) ENGINE = MergeTree(fecha, Landing, 8192) -
第二张表,(文件 csv)! FROM file('kw-2020.csv', 'CSVWithNames', 'fecha Date, Consulta String, Landing String, clicks UInt32, impresiones UInt32, posicion Float32, ctr Float32, dispositivo String, pais String,`,Volumen UInt32,clickstream UInt32 ,cpc Float32,Grupo String')
-
我需要:对于每个“grupo”(包含许多 kws)我需要 - 每个组的所有不同“consulta”字段,以及每个咨询:在组中 -“CTR”的值其中“位置”字段最低 - 最后日期的“位置” - 每个不同“顾问”的点击次数和展示次数 - 组中每个顾问的展示次数和点击次数的累积百分比 - 所有不同的“着陆”和总“点击次数”和“展示次数” - 每个网址的展示次数和点击次数的累计百分比????
-
如何与您共享 INSERTS 或数据?
标签: sql database clickhouse