【问题标题】:select to group rows选择对行进行分组
【发布时间】:2010-10-26 03:34:26
【问题描述】:

我有一张这样的桌子:

Alternative |Total  |Male  |Female
a           |20     |10    |10
b           |50     |20    |30 
c           |40     |10    |30 
c           |30     |15    |15 

现在我想选择所有行和要分组的“c”替代项。

【问题讨论】:

  • 分组是什么意思?您想要返回什么结果?
  • @Ed Harper:我也有这种怀疑。
  • 多么具有讽刺意味的用户名,顺便说一句

标签: sql select group-by


【解决方案1】:
SELECT Alternative, Sum(Total), Sum(Male), Sum(Female) 
FROM table1 
GROUP BY Alternative

【讨论】:

  • 这也会对非 C 的值求和,我不确定这是否是他想要的。请参阅下面的答案。
  • 我很清楚 Rax。根据我使用 SO 的经验,提问者通常并不总是知道如何正确表达他们的问题。如果事实证明你的就是他想要的,那就太好了。
【解决方案2】:

这就够了

SELECT Alternative, [Total] = SUM(Total), [Male] = SUM(Male), [Female] = SUM(Female)
FROM YourTable
GROUP BY Alternative

【讨论】:

  • 在我理解 OP 想要什么之前,我不得不多次阅读这个问题。
  • 我唯一不介意的是总和上的列别名以及另一位发帖人放在此下方的 order by 子句。
【解决方案3】:

使用group by 确定分组,然后使用适当的聚合处理其他字段。我相信在这种情况下,您想使用 sum 在每个组中添加值:

select
   Alternative, sum(Total) as Total, sum(Male) as Male, sum(Female) as Female
from
   TheTable
group by
   Alternative
order by
   Alternative

【讨论】:

    【解决方案4】:

    以下查询将选择所有非“c”的行,然后将所有“c”的行分组,将它们的值相加,并添加一个表示“c”和的单行。我希望这就是你的意思。

    SELECT *
    FROM table1 
    WHERE Alternative != c
    
    UNION
    
    SELECT Alternative, Sum(Total) as Total, Sum(Male) as Male, Sum(Female) as Female
    FROM table1 
    WHERE Alternative = c
    GROUP BY Alternative
    

    如果您只想对具有多个“替代”外观的任何内容进行分组,只需使用:

    SELECT Alternative, Sum(Total) as Total, Sum(Male) as Male, Sum(Female) as Female
    FROM table1 
    GROUP BY Alternative
    

    【讨论】:

    • 嗯...这绝对是从字面上看问题。
    • @TheTXI:我认为这不是一个“分组依据的语法是什么/我如何分组项目”的问题,而是一个更高级的问题。我
    猜你喜欢
    • 1970-01-01
    • 2013-07-27
    • 2019-05-18
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    相关资源
    最近更新 更多