Je souhaite rejoindre deux tables, mais obtenir la moyenne de la colonne jointe uniquement par les occurrences de la table gauche
document: p> entité: p> SELECT
docT.name,
AVG(docT.score),
STRING_AGG(entityT.ename)
FROM
document_sentiment docT
JOIN
entity_sentiment entityT
ON
docT.dId = entityT.dId
GROUP BY
docT.cname
4 Réponses :
Essayez le code ci-dessous
select name, ename, avg(score) as score from (SELECT docT.name, doct.Did, MAX(docT.score) as score, STRING_AGG(entityT.ename) as ename FROM document_sentiment docT JOIN entity_sentiment entityT ON docT.dId = entityT.dId GROUP BY docT.cname, doct.Did ) sub group by name, ename
ci-dessous est pour BigQuery Standard SQL
#standardSQL WITH `project.dataset.document_sentiment` AS ( SELECT 'A' dId, 'n1' name, 100 score UNION ALL SELECT 'B', 'n1', 70 ), `project.dataset.entity_sentiment` AS ( SELECT 'e1' ename, 'a' details, 'A' dId UNION ALL SELECT 'e2', 'a', 'A' UNION ALL SELECT 'e3', 'b', 'A' UNION ALL SELECT 'e4', 'c', 'B' ) SELECT docT.name, AVG(docT.score) average, STRING_AGG(entityT.ename) entities FROM `project.dataset.document_sentiment` docT JOIN ( SELECT dId, STRING_AGG(ename) ename FROM `project.dataset.entity_sentiment` GROUP BY dId ) entityT ON docT.dId = entityT.dId GROUP BY docT.name Row name average entities 1 n1 85.0 e1,e2,e3,e4
C'est délicat. Je pense que les fonctions de fenêtre peuvent être la solution la plus simple: pourquoi est-ce délicat? Eh bien, si vous regroupez par La pré-agrégation ne fait pas l'affaire. Heureusement, cela est résolu à l'aide de fonctions de fenêtre. P> p> CNAME code>, vous perdez code> et ne peut pas faire le
rejoindre code>. P>
J'ai supprimé la balise SQL Server, car c'est clairement MySQL; SQL Server n'utilise pas de backticks (
` code>) pour les caractères de devis. S'il vous plaît seulement marquer les RDBM que vous utilisez lors de l'utilisation des balises. Merci.
Vous n'avez pas de connexion à Google Bigquery pour tester et vérifier. Mais quelque chose comme
avg (distinct doct.score) code> fonctionne dessus?
Vérifiez SQLFIDDLE.COM/#!9/708B25/21
Et s'il y a un même score pour différent? Non, vous ne pouvez pas utiliser AVG (distinct ...) ici!
Joli! Je ne sais pas que c'est ce dont vous avez vraiment besoin, mais bon à savoir.
@MIKHAILBERGY DROITE.
@Lukstorms distincts ne fonctionnera pas car il peut y avoir un score de double pour différent
Je suis d'accord, ce n'est pas la solution.