【问题标题】:How to merge two SELECT queries with different WHERE and GROUP BY clauses [duplicate]如何合并具有不同 WHERE 和 GROUP BY 子句的两个 SELECT 查询[重复]
【发布时间】:2015-02-06 11:55:56
【问题描述】:

我有两个查询如下:

SELECT 
    Actor2Code, 
    COUNT(Actor2Code) AS playermentions 
FROM [events] 
WHERE 
    Year=" + Date + " 
    AND 
    (
        (
            (Actor1CountryCode ='" + mainPlayer1 + "') 
            AND 
            (Actor2CountryCode != '" + mainPlayer1 + "')
        ) 
        OR 
        (
            Actor1CountryCode='" + mainPlayer2 + "' 
            AND 
            Actor2CountryCode !='" + mainPlayer2 + "'
        )
    ) 
GROUP BY Actor2Code;

SELECT 
    Actor1Code, 
    COUNT(Actor1Code) AS playermentions 
FROM [events] 
WHERE 
    Year=" + Date + " 
    AND 
    (
        (
            (Actor2CountryCode ='" + mainPlayer1 + "') 
            AND 
            (Actor1CountryCode != '" + mainPlayer1 + "')
        ) 
        OR 
        (
            Actor2CountryCode='" + mainPlayer2 + "' 
            AND 
            Actor1CountryCode !='" + mainPlayer2 + "'
        )
    ) 
GROUP BY Actor1Code

我将结果合并到 c# 中,我有一个演员列表和另一个提及次数列表。如何将这两个查询合二为一,以便我有一个演员列表并且没有重复的演员代码?一些参与者在两个查询的响应中都有不同的提及次数。我想编写一个查询,合并这两个查询的结果并给我一个列表,其中包括不同的 actor1codes 和 actor2codes 以及提及次数(对于重复值,我需要获得提及次数的总和)

【问题讨论】:

  • 你试过了吗>
  • - 然后在 ActorCode 上对 union 的结果进行分组。
  • 我最初认为 UNION 但根据他正在寻找的内容可能行不通
  • 这是SELECT 还是SQL 中的PROCEDURE
  • 我相信这不可能是一个程序,因为我正在从 Google Big query 读取数据,并且一次只能发送一个查询

标签: c# sql google-bigquery


【解决方案1】:

这几乎可行,但您必须手动删除重复项。

SELECT ActorCode, playermentions FROM

(SELECT 
    Actor2Code as ActorCode, 
    COUNT(Actor2Code) AS playermentions 
FROM [events] 
WHERE 
    Year=" + Date + " 
    AND 
    (
        (
            (Actor1CountryCode ='" + mainPlayer1 + "') 
            AND 
            (Actor2CountryCode != '" + mainPlayer1 + "')
        ) 
        OR 
        (
            Actor1CountryCode='" + mainPlayer2 + "' 
            AND 
            Actor2CountryCode !='" + mainPlayer2 + "'
        )
    ) 
GROUP BY Actor2Code),
(SELECT 
    Actor1Code as ActorCode, 
    COUNT(Actor1Code) AS playermentions 
FROM [events] 
WHERE 
    Year=" + Date + " 
    AND 
    (
        (
            (Actor2CountryCode ='" + mainPlayer1 + "') 
            AND 
            (Actor1CountryCode != '" + mainPlayer1 + "')
        ) 
        OR 
        (
            Actor2CountryCode='" + mainPlayer2 + "' 
            AND 
            Actor1CountryCode !='" + mainPlayer2 + "'
        )
    ) 
GROUP BY Actor1Code);

【讨论】:

  • 感谢您的回复。您的代码产生以下错误:错误:GROUP BY 列表中不存在表达式“ActorCode”
  • 我找不到任何关于此的文档,但请尝试使用 GROUP BY ActorCode 而不是 GROUP BY Actor2Code
  • GROUP BY ActorCode 有效,但现在结果好像我已经合并了从两个查询中分别获得的两个数组。合并了 ActorCodes 和 NumberOfMentions。我的问题是我想要不同的 ActorCodes 和提及次数应该是重复值的提及次数之和。
  • 总和吧?也许将它包装在一个外部组中?
猜你喜欢
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多