【问题标题】:Grouping results of SELECT but keep some values unique对 SELECT 的结果进行分组,但保持某些值唯一
【发布时间】:2014-10-25 00:23:18
【问题描述】:

我有一个这样的 SQL 表

year    tour     wins    cuts   money
1990     EUR       2         4    54,500
1990     USA       1         2    22,000
1991     EUR       4         2    154,000
1991     USA       2         1    245,000
and so on

我希望按年份对结果进行分组,总结胜负 但是,我希望单独保留货币列,并从每一年的行中返回两个值,例如 moneyEUR 和 moneyUSA(基于 TOUR 列)

我目前正在做这样的选择

SELECT year, SUM(wins), SUM(cuts), money FROM players GROUP BY year

此 GROUPS 按年计算,但只返回第一个货币价值。

有没有办法也可以将每个货币值作为单独的值返回? 并且仍然每年总结其他值?

【问题讨论】:

    标签: mysql sql select group-by


    【解决方案1】:

    如果您每年总是恰好有 2 条记录,那么您可以这样做

    SELECT year, 
           SUM(wins), 
           SUM(cuts), 
           sum(case when tour = 'EUR' then money end) as moneyEUR,
           sum(case when tour = 'USA' then money end) as moneyUSA
    FROM players 
    GROUP BY year
    

    【讨论】:

    • 我很抱歉。我忘记了一个小细节。我需要根据游览列关联或能够判断货币价值来自哪一行。 (请参阅问题陈述中已编辑的表格描述)。所以我需要知道货币价值是针对哪个旅游价值的。因此 min 或 max 不起作用。感谢您的快速回复!
    【解决方案2】:
    select t1.tour, t1.money, t1.year, t2.wins_sum, t2.cuts_sum
    from players t1
    join (
        select year
        sum(wins) wins_sum,
        sum(cuts) cuts_sum
        from players
        group by year
    ) t2 on t1.year = t2.year
    

    【讨论】:

    • 感谢您的快速响应。然后我如何通过答案访问每个货币价值?我可以关联货币项目来自哪个旅游价值行吗?
    • @EdPattermann 此查询为每个货币值返回 1 行。是的,您可以将游览添加到选择中。见更新
    • 我明白了。然后每一行都有相同的结果,除了货币价值不同。是的?我希望每年有一个行,具有总和值和两个货币值,moneyEUR 和 moneyUSA。感谢帮助。 -- 埃德
    • @EdPattermann 这是正确的。 np,juergen 的答案应该提供您正在寻找的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多