【问题标题】:very very hard Query and group by columns非常非常困难的查询和按列分组
【发布时间】:2015-01-30 22:11:06
【问题描述】:

我有一张如下表:

A----B----C----D----F----E
1----2----3-----4----5----6
1----2----3-----4----5----6
1----2----3-----4----5----6

现在我想查询该表到下面的表导致以下列 A、B 的字段值 c、d、F 列中的值、E 以下列 A、B,

A----B
1----2
1----2
1----2
3----4
3----4
3----4
5----6
5----6
5----6

现在按 A 列分组并对 B 列求和。

决赛桌

A----B
1----6
3----12
5----18

【问题讨论】:

  • 您能否更清楚地重新编写您的问题?我完全不明白。
  • 这是sql server还是mysql。你标记了他们两个,他们不是一回事。而且,这并不像你想象的那么难。您在这里有 3 个不同的结果,每个结果集都是一个简单的聚合。

标签: mysql sql sql-server sql-server-2008 tsql


【解决方案1】:

您可以使用Cross applyunpivot 的数据然后找到sum

CREATE TABLE #test
  (A INT,B INT,C INT,D INT,F INT,E INT)

INSERT #test
VALUES (1,2,3,4,5,6),
       (1,2,3,4,5,6),
       (1,2,3,4,5,6)

要获得第一个结果,请使用Cross Apply 将您的列转换为行

SELECT data A,
       cname B
FROM   #test
       CROSS apply (VALUES(b,a),
                          (d,c),
                          (e,f)) ca (cname, data) order by A

应该是什么结果

A   B
--  --
1   2
1   2
1   2
3   4
3   4
3   4
5   6
5   6
5   6

然后从上面的结果中,只需使用 Aggregate Sum 找到由 A 分组的 B 的总和

SELECT data A,
       Sum(cname) B
FROM   #test
       CROSS apply (VALUES(b,a),
                          (d,c),
                          (e,f)) ca (cname, data)
GROUP  BY data 

输出:

+==+==+
|A |B |
+==+==+
|1 |6 |
|3 |12|
|5 |18|
+==+==+

【讨论】:

    【解决方案2】:

    也许这样的事情可以解决问题:

    SELECT A, SUM(B) AS B
    FROM (
        SELECT A, B FROM yourtable
        UNION ALL
        SELECT C, D FROM yourtable
        UNION ALL 
        SELECT E, F FROM yourtable
    ) subquery
    ORDER BY A
    GROUP BY A
    

    子查询/联合内容将您的 6 列布局转换为 2 列,然后外部查询进行分组/求和。

    【讨论】:

      【解决方案3】:

      这是对您之前答案的group by 查询:

      select a, sum(b) as b
      from (<previous query here>) a
      group by a;
      

      【讨论】:

        猜你喜欢
        • 2013-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-10
        • 1970-01-01
        • 1970-01-01
        • 2017-03-18
        • 2019-07-22
        相关资源
        最近更新 更多