标签: sum

SUM(Amount) 不同的值,然后是行的总和 - SQL Server 2017 (14.0.3045.24)

我正在使用以下查询来获取过滤器中所有行的字段数量的总和:

SELECT SUM(Amount)
FROM dbo.[CompanyName$Detailed Cust_ Ledg_ Entry]
WHERE [Customer No_] = 'XYZ'
Run Code Online (Sandbox Code Playgroud)

结果是

结果

这个结果不等于行的总和

SELECT [Customer No_], Amount
FROM dbo.[CompanyName$Detailed Cust_ Ledg_ Entry]
WHERE [Customer No_] = 'XYZ'
Run Code Online (Sandbox Code Playgroud)

行的结果是:

行结果

计算行的等位基因数量时,结果为:-29,59 而不是 -59,18

有人可以解释这种行为吗?

SP_Helpindex 输出: SP_Helpindex 输出

查询计划: 查询计划

XML 查询计划

<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.481" Build="14.0.3045.24" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
  <BatchSequence>
    <Batch>
      <Statements>
        <StmtSimple StatementCompId="1" StatementEstRows="9.00002" StatementId="2" StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" CardinalityEstimationModelVersion="140" StatementSubTreeCost="0.029753" StatementText="SELECT 'XYZ' [Customer No_],[Amount] FROM [dbo].[CompanyName$Detailed Cust_ Ledg_ Entry] WHERE [Customer No_]=@1" StatementType="SELECT" QueryHash="0x97A8CCC9F15EC998" QueryPlanHash="0x7502550BCACA55B0" RetrievedFromCache="false" SecurityPolicyApplied="false">
          <StatementSetOptions …
Run Code Online (Sandbox Code Playgroud)

sql-server sum sql-server-2017

5
推荐指数
1
解决办法
109
查看次数

为聚合连接多个表

如何使用 Sum 和 Count 函数连接多个表进行聚合?

我正在尝试的查询如下:

Select
  campaigns.id,
  campaigns.name,
  Count(landers.campaign_id) As landers_count,
  Sum(conversions.revenue) As total_revenue
From
  campaigns Left Join
  conversions
    On campaigns.id = conversions.campaign_id Left Join
  landers
    On campaigns.id = landers.campaign_id
Group By
  campaigns.id
Run Code Online (Sandbox Code Playgroud)

我什至尝试过外部连接,但没有运气,而且我得到的结果不准确。

我的示例表如下:

活动表:

| id | name           |
+----+----------------+
| 1  | Facebook Ads   |
| 2  | Bing Ads       |
| 3  | Direct Mailing |
| 4  | Solo Ads       |
Run Code Online (Sandbox Code Playgroud)

兰德斯表:

| id | name        | campaign_id |
+----+-------------+-------------+
| 1  | Lander …
Run Code Online (Sandbox Code Playgroud)

mysql join aggregate count sum

4
推荐指数
2
解决办法
7420
查看次数

对某个日期范围内的计数列求和的性能问题

在我们的应用程序中,我们有一个查询,它在 API 端点上将具有“活动”的用户返回给指定的客户端或事件(一个或多个 - 由 ID 指定)。当活动表有 3000 万行时,这个查询大约需要 15 秒才能返回(注意“资产”表中还有约 60 万行和 2700 个“用户”)。

表格的粗略架构可以在我的问题的底部找到。下面是我们查找“活动超过阈值的用户”的查询。为简洁起见,我也在下面放置了视图定义。

当此端点返回一页数据时,还会运行第二个类似的查询以获取填充分页响应的元素总数 - 本质上,端点的性能是查询性能的 2 倍。

我的问题本质上是,我应该应用哪些技术来提高此查询的性能?我们试图坚持的“基准”是端点响应的“亚秒级”。

查询计划可以在这里找到。

SELECT DISTINCT t.type, t.sid, t.name, t.emailAddress, t.jobTitle
FROM sec.Trustee t
    INNER JOIN (
        SELECT data.sid, SUM(data.hoursBilled) as hoursBilled, SUM(data.docsAccessed) as docsAccessed,     data.asset_type as asset_type, data.displayId as displayId, data.displayName as displayName
        FROM (
            SELECT billing.trustee_sid as sid, 0 as hoursBilled, billing.recordedValue as docsAccessed, a.type as asset_type, a.displayId, a.displayName
            FROM sec._DocumentsBilling billing
            INNER JOIN sec.SessionSid s
            ON …
Run Code Online (Sandbox Code Playgroud)

sql-server aggregate sum

4
推荐指数
1
解决办法
208
查看次数

需要单独的列来计算百分比

我有下表:

NAME
Alex
Bob 
Bob
Tim
Alex
Roger
Run Code Online (Sandbox Code Playgroud)

我需要生产以下内容:

 Name    Count Percentage
 Alex    2     33%
 Bob     2     33%
 Roger   1     16.6%
 Tim     1     16.6%
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始。我可以对计数进行初始查询,这很简单。

postgresql count sum

3
推荐指数
1
解决办法
3万
查看次数

每名员工每天的总工作时间(包括通宵工作时间)

我有一个这样的表:

CREATE TABLE Table1
(ID int, empid int, time datetime, state int);

+--------------+---------------------+-----------------+
|    empid     |       time          |      state      | 
+--------------+---------------------+-----------------+
(      4       | 2014-03-01 11:12:00 |         0       )  
(      5       | 2014-03-01 12:28:06 |         0       )
(      4       | 2014-03-01 12:50:07 |         1       )
(      4       | 2014-03-01 13:38:00 |         0       )
(      5       | 2014-03-01 13:28:06 |         1       )
(      4       | 2014-03-01 18:42:15 |         1       )
(      4       | 2014-03-02 08:11:08 |         0       ) 
(      4       | …
Run Code Online (Sandbox Code Playgroud)

mysql aggregate sum running-totals

3
推荐指数
1
解决办法
7893
查看次数

如何使用JOIN和SUM函数计算查询返回列的总数?

我跑了咆哮查询;

询问:

SELECT  j.jobId,
        j.productId,
        p.productUnitPrice
FROM    JobRequiredProducts J
JOIN    Product p
  ON    p.productId = j.productId
WHERE   j.jobId = 1
ORDER BY j.jobId
Run Code Online (Sandbox Code Playgroud)

并得到了以下结果;

查询结果:

jobId | productId | unitPrice 
_____________________________
  1   |     4     |   175.99
  1   |     5     |   100.00
  1   |     6     |   125.00
Run Code Online (Sandbox Code Playgroud)

现在,我想计算所有 unitPrice 以获得总数。我期望的结果是;

期待结果:

jobId | productId | Total
____________________________
  1   |     4     |   175.99
  1   |     5     |   100.00
  1   |     6     |   125.00
 null |    null   |   400.99
Run Code Online (Sandbox Code Playgroud)

因此,下面是我尝试过的查询;

我试过的查询:

SELECT  j.jobId, …
Run Code Online (Sandbox Code Playgroud)

join sql-server query sum

3
推荐指数
1
解决办法
236
查看次数

零/NULL 大小写技巧

在《SQL 入门》一书中,Thomas Nield 谈到了一种他称之为“零/空情况技巧”的技术:

有一个简单但功能强大的工具,可以将不同的过滤条件应用于不同的聚合。我们可以在两个单独的列中创建龙卷风存在与不存在时的单独总计数:

SELECT year, month,
SUM(CASE WHEN tornado = 1 THEN precipitation ELSE 0 END) as tornado_precipitation,
SUM(CASE WHEN tornado = 0 THEN precipitation ELSE 0 END) as non_tornado_precipitation
FROM station_data
WHERE year >= 1990
GROUP BY year, month
Run Code Online (Sandbox Code Playgroud)

我们有效地做的就是当tornado = 1 或tornado = 0 时去掉WHERE 条件,然后将这些条件移至SUM() 函数内的CASE 表达式。如果满足条件,则将降水值添加到总和中。如果不是,则添加 0,但没有效果。我们对两列进行这些操作,分别针对龙卷风存在时和不存在龙卷风时进行。

您可以使 CASE 表达式具有所需数量的条件/值对,从而使您能够通过聚合对值进行高度特定的截取。您还可以使用此技巧来模拟交叉表和数据透视表,将聚合表示为单独的列而不是行。一个常见的示例是进行当年/上一年分析,因为您可以使用不同的列来表示不同的年份。


作为新手,该技术似乎对于总结数据非常有用。我想在线查找该技术以获取更多信息。

该书的作者将该技术称为“零/空案例技巧”。但当我用谷歌搜索这个词时,我没有得到很多结果。

问题:

该技术有一个普遍接受的名称吗?(在线搜索时会产生更多结果)

oracle terminology case sum oracle-19c

3
推荐指数
1
解决办法
564
查看次数

如何在 SQL Server 中使用 SUM 和 GROUP BY 连接两个表

我有2张桌子

  1. 产品
ID 指定
1 古柯
2 百事可乐
3 芬达
4
5

2)子产品

产品编号 姓名 数量
1 SM 10
1 lg 10
1 XL 20
2 1升 10
2 2升 20
2 5升 20
3 10
3 20
4 20
4 克德 30

我想要的是这样的:产品表中的指定和总数量,代表具有相同product_id的数量的总和

指定 总数(量
古柯 40
百事可乐 50
芬达 30
50

注:我使用 SQL 服务器

join sql-server query group-by sum

3
推荐指数
1
解决办法
3万
查看次数

双精度的总和给出了奇怪的结果

我一直在计算包含大约 500.000 条双精度数字记录的列的总和。数据库中的所有数字通常应该是句点后面的两个密码。但是,在计算总和后,我得到了 6 个数字:123123123.549977

要么我的数据库中有错误的数据,其中在句点之后有更多数字的记录,要么我遗漏了 sum 函数。

所以我的问题是:

  • sum 函数是否有任何可能导致这种情况的舍入属性?
  • 有没有办法选择句点后包含两个以上数字的所有记录?

postgresql sum

1
推荐指数
1
解决办法
8987
查看次数

PostgreSQL:避免多次对相同值进行 SUM

我有一个学生表和一个不同科目的分数表。我想将所有科目的每个学生的 score1 和 score2 相加,然后为每个学生加上奖金。

CREATE TABLE student (
   id serial PRIMARY KEY,
   name text NOT NULL,
   bonus integer NOT NULL,
);

CREATE TABLE score (
  id serial PRIMARY KEY,
  subject text NOT NULL,
  score1 integer NOT NULL,
  score2 integer NOT NULL,
  student_id integer NOT NULL,
  CONSTRAINT s_id FOREIGN KEY (student_id) REFERENCES student (id),
);
Run Code Online (Sandbox Code Playgroud)

连接 score1 和 score2 的查询如下所示:

SELECT st.name, sum(sc.score1 + sc.score2) as total
FROM student st
LEFT JOIN score sc ON sc.student_id = st.id
group by …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate sum

1
推荐指数
1
解决办法
1985
查看次数

如何在没有名称的情况下对列进行求和?

我被困在如何对一列求和的方式上,让我们说表的第一列(来自另一个查询的结果)而不知道列名和列位置 id 之类的东西。

是这样的

select sum(what?), employID from
    ( select count(*), employID from  table1...
           union all
      select count(*), employID from  table2...
           union all
      select count(*), employID from  table3...
)
Run Code Online (Sandbox Code Playgroud)

或者,如果它在单个查询中(使用 sum() 的单个简单选择查询),例如:

select employName, sum(what?), employID from tableX
Run Code Online (Sandbox Code Playgroud)

我如何告诉 SUM() 函数根据表中的列位置索引求和SUM(2)

注意:我不想使用列别名,是否有可能不基于列名进行 SUM?

我知道我可以使用列名或别名,但我真的想知道不只使用这些的可能性,这就是我问这个问题的原因,如果没有可能的方法,那么我会接受“否”作为正确答案。

oracle sum

1
推荐指数
2
解决办法
1681
查看次数