【问题标题】:SQL - Using Union All and add duplicatesSQL - 使用 Union All 并添加重复项
【发布时间】:2016-11-14 02:17:15
【问题描述】:

我正在使用 Union All 进行查询,并且我想确保将重复的行添加到结果查询中。使用 Union All 时,无法正确添加重复行。在谷歌搜索“sql union with duplicates”时,它指出:“Union 将删除重复项。Union All 不会。您在查询的第一部分中还没有重复项(可能由左连接生成)。据我了解,UNION 它不会添加到结果集中已经存在的行中,但不会删除第一个数据集中已经存在的重复项。”就我而言,我确实想添加已经在其中的结果集行。我该怎么做?

这是我的查询:

SELECT player_name_fkey, school_name_fkey, score_simple, sum(score_simple) over (partition by player_name_fkey) as sum_scores

FROM (

    SELECT player_name_fkey, school_name_fkey, SUM(score) as score_simple 

        FROM simple LEFT JOIN players on players.name=simple.player_name_fkey 

        WHERE category='Cadet' AND gender='Féminin' GROUP BY player_name_fkey, school_name_fkey

    UNION ALL

        SELECT player_name_fkey, school_name_fkey, SUM(score) as score_simple

        FROM double LEFT JOIN players on players.name=double.player_name_fkey 

        WHERE category='Cadet' AND gender='Féminin' GROUP BY player_name_fkey, school_name_fkey) t1

GROUP BY player_name_fkey, school_name_fkey, score_simple

提前感谢您的帮助!

【问题讨论】:

  • 尝试删除末尾的GROUP BY 子句。
  • 像魅力一样工作,谢谢!

标签: sql postgresql


【解决方案1】:

正如 Felix Pamittan 所说,最后删除 GROUP BY 子句解决了我的问题。

SELECT player_name_fkey, school_name_fkey, score_simple, sum(score_simple) over (partition by player_name_fkey) as sum_scores

FROM (

    SELECT player_name_fkey, school_name_fkey, SUM(score) as score_simple 

    FROM simple LEFT JOIN players on players.name=simple.player_name_fkey 

    WHERE category='Cadet' AND gender='Féminin' GROUP BY player_name_fkey, school_name_fkey

UNION ALL

    SELECT player_name_fkey, school_name_fkey, SUM(score) as score_simple

    FROM double LEFT JOIN players on players.name=double.player_name_fkey 

    WHERE category='Cadet' AND gender='Féminin' GROUP BY player_name_fkey, school_name_fkey) t1

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2019-02-02
    • 1970-01-01
    • 2014-11-30
    • 2011-01-24
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多