【问题标题】:SQL select sum/average all rowsSQL选择总和/平均所有行
【发布时间】:2015-08-08 02:32:31
【问题描述】:

我有这个从表中选择行的代码,但我需要让他返回所有行的总和或所有行的平均值。我试图将代码放在 sum(select) 中的 select 之类的其他选择中,但是它不起作用,有什么想法可以使它起作用吗?抱歉信息不多。现在它打印 25 行。我需要让它返回 1 行,就像 sum(ontime) 和 avg(actual)。我的意思是将所有 25 行的 ontime 列和 avg actual 列相加。

 SELECT    AVG(CASE WHEN a.ontime = 'on time' THEN 100 ELSE 0 END)*COUNT(a.country) AS ontime
    ,AVG(CASE WHEN a.accuracy = 'accurate' THEN 100 ELSE 0 END) AS actual
    ,COUNT(a.country) AS task_count

FROM 
    bstplanning.dbo.sc_data a
    INNER JOIN bstplanning.dbo.users 
    ON a.user_id = bstplanning.dbo.users.user_id    

WHERE
    a.date >= '2015-04-01 00:00:00.000' AND a.date <= '2015-04-30 00:00:00.000' AND a.actual > 0 AND
    ((a.ontime='on time' OR a.ontime = 'late') OR (a.accuracy='accurate' OR a.accuracy = 'error'))
     and bstplanning.dbo.users.split='Rep'
     and bstplanning.dbo.users.user_surname='user'
GROUP BY
     a.country
    ,a.client
    ,a.task_group
    ,frequency
    ,a.track

【问题讨论】:

  • its not working 还不够。给我们详细信息。
  • 使用示例数据和所需结果编辑您的问题。我还注意到代码是 SQL Server 代码,所以我删除了 MySQL 标记。
  • 已编辑。是不是更清楚了?

标签: sql-server select sum average


【解决方案1】:

你可以写像外部查询和你的查询作为内部查询..

SELECT Sum(Ontime) AS Ontime
    ,AVG(actual) AS Actual
    ,Sum(task_count) AS task_count
FROM (
    SELECT AVG(CASE 
                WHEN a.ontime = 'on time'
                    THEN 100
                ELSE 0
                END) * COUNT(a.country) AS ontime
        ,AVG(CASE 
                WHEN a.accuracy = 'accurate'
                    THEN 100
                ELSE 0
                END) AS actual
        ,COUNT(a.country) AS task_count
    FROM bstplanning.dbo.sc_data a
    INNER JOIN bstplanning.dbo.users ON a.user_id = bstplanning.dbo.users.user_id
    WHERE a.DATE >= '2015-04-01 00:00:00.000'
        AND a.DATE <= '2015-04-30 00:00:00.000'
        AND a.actual > 0
        AND (
            (
                a.ontime = 'on time'
                OR a.ontime = 'late'
                )
            OR (
                a.accuracy = 'accurate'
                OR a.accuracy = 'error'
                )
            )
        AND bstplanning.dbo.users.split = 'Rep'
        AND bstplanning.dbo.users.user_surname = 'user'
    GROUP BY a.country
        ,a.client
        ,a.task_group
        ,frequency
        ,a.track
    ) Drive

【讨论】:

  • 谢谢。当我尝试这样做但它对我不起作用时,现在它起作用了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2014-01-27
  • 1970-01-01
相关资源
最近更新 更多