如何在一个MS SQL查询中获得不同的平均值和总和值?

津尼德

我试图创建MS SQL Server 2012中的查询,给了我一个countaverage还有一些sum在数据库表中的不同记录的值。我将尽力解释我的处境和愿望。如果仍然不清楚或需要一些其他信息,请告诉我。

下表TEMP具有10条记录:

╔════════╦═════════════╦════════╦═══════════╗
║ Number ║ DateOfBirth ║ Gender ║ Activity  ║
╠════════╬═════════════╬════════╬═══════════╣
║ 191806 ║ 1940-08-31  ║ F      ║ AMADMIN   ║
║ 196484 ║ 1940-09-23  ║ F      ║ AMHOST    ║
║ 199480 ║ 1949-10-16  ║ F      ║ AMTRAINER ║
║ 201089 ║ 1947-04-08  ║ M      ║ AMTRAINER ║
║ 204528 ║ 1950-05-02  ║ F      ║ AMHOST    ║
║ 226356 ║ 1966-04-12  ║ M      ║ AMADMIN   ║
║ 226356 ║ 1966-04-12  ║ M      ║ AMHOST    ║
║ 377599 ║ 1985-05-15  ║ F      ║ AMADMIN   ║
║ 377599 ║ 1985-05-15  ║ F      ║ AMHOST    ║
║ 395809 ║ 1980-03-03  ║ F      ║ AMADMIN   ║
╚════════╩═════════════╩════════╩═══════════╝

现在,考虑运行以下查询:

的SQL

  SELECT COUNT([Number]) AS Number, ROUND(AVG(CAST(DATEDIFF(DAY, [DateOfBirth], GETDATE()) / 365.2425 AS FLOAT)), 1) AS AverageAge,
    SUM(CASE WHEN [Gender] = 'M' THEN 1 ELSE 0 END) AS Male,
    SUM(CASE WHEN [Gender] = 'F' THEN 1 ELSE 0 END) AS Female
  FROM [TEMP]
  WHERE [Activity] IN ('AMHOST', 'AMADMIN', 'AMTRAINER')

此查询将给我以下结果:

结果

╔════════╦════════════╦══════╦════════╗
║ Number ║ AverageAge ║ Male ║ Female ║
╠════════╬════════════╬══════╬════════╣
║     10 ║ 57,3       ║    3 ║      7 ║
╚════════╩════════════╩══════╩════════╝

到现在为止还挺好!但是现在是棘手的部分。我真正想要的是distinct表中所有记录的结果这意味着计算所有人员的平均年龄和男性/女性人数减去两个“双重”人员(拥有Number 226356377599)。因此,我需要一个产生以下结果的查询:

想要的结果

╔════════╦════════════╦══════╦════════╗
║ Number ║ AverageAge ║ Male ║ Female ║
╠════════╬════════════╬══════╬════════╣
║      8 ║ 56,9       ║    2 ║      6 ║
╚════════╩════════════╩══════╩════════╝

我知道如何获取distinct一条查询记录,如下所示:

的SQL

  SELECT COUNT(DISTINCT([Number])) AS Number, ROUND(AVG(CAST(DATEDIFF(DAY, [DateOfBirth], GETDATE()) / 365.2425 AS FLOAT)), 1) AS AverageAge,
    SUM(CASE WHEN [Gender] = 'M' THEN 1 ELSE 0 END) AS Male,
    SUM(CASE WHEN [Gender] = 'F' THEN 1 ELSE 0 END) AS Female
  FROM [TEMP]
  WHERE [Activity] IN ('AMHOST', 'AMADMIN', 'AMTRAINER')

但这会产生:

结果

╔════════╦════════════╦══════╦════════╗
║ Number ║ AverageAge ║ Male ║ Female ║
╠════════╬════════════╬══════╬════════╣
║      8 ║ 57,3       ║    3 ║      7 ║
╚════════╩════════════╩══════╩════════╝

现在Number算好,但是AverageAgeMaleFemale值是不正确的。

我的问题是,如果甚至可以从这样的查询开始,该如何调整我的查询以检索WANTED RESULT集中显示的值

加雷斯

由于活动未出现在任何汇总函数中,因此您可以简单地从结果中减去它,并在汇总之前使用子查询获取不同的记录,然后再将其应用于COUNT(DISTINCT CASE..男性/女性人数:

SELECT  COUNT(DISTINCT [Number]) AS Number, 
        ROUND(AVG(CAST(DATEDIFF(DAY, [DateOfBirth], GETDATE()) / 365.2425 AS FLOAT)), 1) AS AverageAge,
        COUNT(DISTINCT CASE WHEN [Gender] = 'M' THEN [Number] END) AS Male,
        COUNT(DISTINCT CASE WHEN [Gender] = 'F' THEN [Number] END) AS Female
FROM    (   SELECT  DISTINCT Number, DateOfBirth, Gender
            FROM    [sw_test].[dbo].[TEMP]
            WHERE   [Activity] IN ('AMHOST', 'AMADMIN', 'AMTRAINER')
        ) AS t;

SQL小提琴上的示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在一个查询中获得不同时间段的总和

来自分类Dev

如何获得不同组的平均值(即本例中的年份)

来自分类Dev

将2个SQL查询联接在一起,以在同一查询中获得工作日平均值和周末平均值

来自分类Dev

Sql Server 2012中一个查询的平均值和中位数

来自分类Dev

Sql Server 2012中一个查询的平均值和中位数

来自分类Dev

如何从6个不同的数字中获得平均值?

来自分类Dev

如何获得SQL查询的前N行的平均值?

来自分类Dev

如何使用 angular 和 firebase 从 json 值中获得平均值

来自分类Dev

如何获得组中“中间”值的平均值?

来自分类Dev

如何获得高于和低于python中的平均值?

来自分类Dev

MS Access - 如何在一个记录集中聚合两个查询?

来自分类Dev

如何在SQL,MySQL中每7天查询一次平均值?

来自分类Dev

如何在另一个MS图形SDK中获取驱动器的信息

来自分类Dev

如何计算一列中的n个值和整体平均值?

来自分类Dev

如何使用php查找两个不同sql查询的平均值

来自分类Dev

r-按第一行计算的平均值和总和值

来自分类Dev

MySQL:如何编写取数字总和的平均值的查询

来自分类Dev

如何获得每n个值的移动平均值

来自分类Dev

在一个MySQL查询中根据不同日期范围选择平均值的select语句

来自分类Dev

如何在一个MS Excel文件中将2个gridviews导出到2个单独的工作表中?

来自分类Dev

如何在一个列中的两个值之间取平均值并将该值放在Excel中的它们之间?

来自分类Dev

如何根据另一个表中的平均值对SQL表进行排序

来自分类Dev

字典中上一个和下一个值的平均值

来自分类Dev

SQL查询获得平均值如下情况或如何使用休眠条件

来自分类Dev

如何获得一个单元格的平均值和总和,该单元格的两个数字中间包含一个破折号?

来自分类Dev

MS SQL查询每天的最小值/最大值/平均值

来自分类Dev

如何获得SQL中每个幼儿园的最近三个年级的平均值?

来自分类Dev

如何在SQL中获得每个组的平均值并找出异常值

来自分类Dev

如何使用不同的函数计算三个数字的总和、平均值和乘积

Related 相关文章

  1. 1

    如何在一个查询中获得不同时间段的总和

  2. 2

    如何获得不同组的平均值(即本例中的年份)

  3. 3

    将2个SQL查询联接在一起,以在同一查询中获得工作日平均值和周末平均值

  4. 4

    Sql Server 2012中一个查询的平均值和中位数

  5. 5

    Sql Server 2012中一个查询的平均值和中位数

  6. 6

    如何从6个不同的数字中获得平均值?

  7. 7

    如何获得SQL查询的前N行的平均值?

  8. 8

    如何使用 angular 和 firebase 从 json 值中获得平均值

  9. 9

    如何获得组中“中间”值的平均值?

  10. 10

    如何获得高于和低于python中的平均值?

  11. 11

    MS Access - 如何在一个记录集中聚合两个查询?

  12. 12

    如何在SQL,MySQL中每7天查询一次平均值?

  13. 13

    如何在另一个MS图形SDK中获取驱动器的信息

  14. 14

    如何计算一列中的n个值和整体平均值?

  15. 15

    如何使用php查找两个不同sql查询的平均值

  16. 16

    r-按第一行计算的平均值和总和值

  17. 17

    MySQL:如何编写取数字总和的平均值的查询

  18. 18

    如何获得每n个值的移动平均值

  19. 19

    在一个MySQL查询中根据不同日期范围选择平均值的select语句

  20. 20

    如何在一个MS Excel文件中将2个gridviews导出到2个单独的工作表中?

  21. 21

    如何在一个列中的两个值之间取平均值并将该值放在Excel中的它们之间?

  22. 22

    如何根据另一个表中的平均值对SQL表进行排序

  23. 23

    字典中上一个和下一个值的平均值

  24. 24

    SQL查询获得平均值如下情况或如何使用休眠条件

  25. 25

    如何获得一个单元格的平均值和总和,该单元格的两个数字中间包含一个破折号?

  26. 26

    MS SQL查询每天的最小值/最大值/平均值

  27. 27

    如何获得SQL中每个幼儿园的最近三个年级的平均值?

  28. 28

    如何在SQL中获得每个组的平均值并找出异常值

  29. 29

    如何使用不同的函数计算三个数字的总和、平均值和乘积

热门标签

归档