标签: aggregate-functions

T-SQL 2005:计算所有行和行符合标准

这是场景:

我有一个包含3列的表:'KeyColumn','SubKeyColumn'和'BooleanColumn',其中前两个是表的主键.

对于我的查询,我想计算'KeyColumn'中任何给定值的行数,并且我也想知道哪些值为'BooleanColumn'的值为true.我最初的想法是创建一个这样的查询:

SELECT
   COUNT(*)
   ,COUNT(CASE WHEN BooleanColumn = 1 THEN 1 ELSE 0 END)
FROM
   MyTable
GROUP BY
   KeyColumn
Run Code Online (Sandbox Code Playgroud)

但是,第二部分不起作用(我不完全确定为什么我认为它会开始).是否可以在一个查询中执行此类操作?或者我是否需要进行多次查询才能实现这一目标?

sql t-sql sql-server sql-server-2005 aggregate-functions

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

使用SQL将Oracle中的2行分组为1

我有一个表有数据的表

state   total   

A       3   

B       6

C       2 

D       7

E       4

我需要从中生成一个表,其中包含A&B(true)和C,D,E(False)的总和

Result Table

Status     Total

True        9 (sum of A and B )

False       13 (sum of C, D, E)

有任何想法如何使用SQL做到这一点?我在Oracle中这样做

sql oracle aggregate aggregate-functions

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

SQL报告如何计算符合特定条件的记录数

假设您有一个表,例如:

id   status  date
-----------------------
1    2       today
2    3       today
3    3       yesterday
4    2       yesterday
5    1       yesterday
Run Code Online (Sandbox Code Playgroud)

并且您希望查询计算给定日期的状态为1,2或3的数字或结果,在示例中,所需的结果集将为:

date        status 1   status 2  status 3 
            count      count     count 
------------------------------------------
today       0          1         1
yesterday   1          1         1
Run Code Online (Sandbox Code Playgroud)

谁能指出我正确的方向?谢谢.

sql oracle pivot aggregate-functions

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

涉及JOINS的SQL问题

我有两个类似布局的表,包括INCOME和EXPENSES.该id列是客户ID.

我需要一个客户TOTAL AMOUNT的结果,总结收入和支出.

Table: Income
| id | amountIN|
+--------------+
| 1  |  a      |  
| 2  |  b      |  
| 3  |  c      |  
| 4  |  d      |  

Table: Expenses
| id | amountOUT|
+---------------+
| 1  |  -x      |   
| 4  |  -z      | 
Run Code Online (Sandbox Code Playgroud)

我的问题是,有些客户只有开支,有些只是收入...所以无法提前知道我需要做的事情 LEFT or RIGHT JOIN.

在上面的例子中,RIGHT JOIN可以解决这个问题,但是如果情况被颠倒(Expenses表上有更多的客户)它就不起作用了.

Expected Result
    | id | TotalAmount|
    +--------------+
    | 1  |  a - x  |  
    | 2  |  b      |  
    | 3  |  c      | …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server aggregate-functions sql-server-2008

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

如何使此SQL更新语句更有效?

我试图将计数,总和和平均值从一个表添加到另一个表,但我最终查询每个值的相同数据.我正在使用PostgreSQL.我正在向专家们讨论如何使这个更新语句更有效率.这里是:

update "table1" set 
"col1" = (SELECT COUNT(*) FROM "table2" WHERE "table2Id" = "table1"."table1Id"), 
"col2" = (SELECT AVG("someCol") FROM "table2" WHERE "table2Id" = "table1"."table1Id"),
"col3" = (SELECT SUM("someCol") FROM "table2" WHERE "table2Id" = "table1"."table1Id");
Run Code Online (Sandbox Code Playgroud)

我应该能够像这样运行一个子查询并访问更新的返回值,对吗?

SELECT COUNT(*), AVG("someCol"), SUM("someCol") FROM "table2" WHERE "table2Id" = "table1"."table1Id";
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢.

sql postgresql aggregate-functions

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

具有两个连接的查询中的mysql聚合函数会产生意外结果

给出以下(非常简化的)mysql表结构:

制品

  • ID

产品类别

  • ID
  • PRODUCT_ID
  • 状态(整数)

product_tags

  • ID
  • PRODUCT_ID
  • some_other_numeric_value

我试图找到与某个product_tag有关联的每个产品,并且至少有一个与status-attribute为1的类别的关系.

我尝试了以下查询:

SELECT *

FROM `product` p

JOIN `product_categories` pc
ON p.`product_id` = pc.`product_id`

JOIN `product_tags` pt
ON p.`product_id` = pt.`product_id`

WHERE pt.`some_value` = 'some comparison value'

GROUP BY p.`product_id`

HAVING SUM( pc.`status` ) > 0

ORDER BY SUM( pt.`some_other_numeric_value` ) DESC
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:SUM(pt.some_other_numeric_value)返回意外值.

我意识到,如果有问题的产品有更多然后一个关系到product_categories表,然后每相对于product_tags表计为许多计时因为有关系的product_categories表!

例如:如果id = 1的产品与具有ids = 2,3和4的product_categories的关系,以及与具有ID 5和6的product_tags的关系 - 那么如果我插入a GROUP_CONCAT(pt.id),那么它确实给出了5,6,5 ,6,5,6而不是预期的5,6.

起初我怀疑它是与连接类型(左连接,右连接,内连接,等等)的一个问题,所以我想尽连接类型,我知道的,但无济于事.我还试图在GROUP …

mysql join aggregate-functions

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

我得到:"你试图执行一个不包含指定表达式'OrdID'的查询作为聚合函数的一部分.我如何绕过?

我的代码如下:

SELECT Last, OrderLine.OrdID, OrdDate, SUM(Price*Qty)  AS total_price
    FROM ((Cus INNER JOIN Orders ON Cus.CID=Orders.CID)
        INNER JOIN OrderLine
            ON Orders.OrdID=OrderLine.OrdID)
        INNER JOIN ProdFabric
            ON OrderLine.PrID=ProdFabric.PrID   
            AND OrderLine.Fabric=ProdFabric.Fabric  
    GROUP BY Last  
    ORDER BY Last DESC, OrderLine.OrdID DESC;  
Run Code Online (Sandbox Code Playgroud)

此代码之前已经得到了回答,但含糊不清.我想知道我哪里出错了.

您尝试执行不包含指定表达式"OrdID"的查询作为聚合函数的一部分.

是我不断得到的错误消息,无论我改变什么,它都会给我这个错误.是的我知道,它是用SQL-92编写的,但是我如何使它成为一个合法的功能呢?

sql ms-access aggregate-functions ms-access-2010

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

我们可以使用不同的过滤条件在同一个表字段或列上多次使用相同的聚合函数吗?

我想在具有不同过滤器的同一字段上的查询中的'Amount'字段上使用SUM()函数4次. 就像是



SELECT Date1,CC,BU, SUM(Amount),SUM(Amount),SUM(Amount),SUM(Amount)
FROM MainTable<br>
GROUP BY CC,BU,Date1
Run Code Online (Sandbox Code Playgroud)

这里

第一个SUM(Amount)应该被计算时,Mode='011'Mode='012'从MainTable
第二次SUM(Amount)时,应计算Mode like '03_'Mode Like '05_'从MainTable
3 SUM(Amount)时,应计算Mode like '10_'从MainTable
4日SUM(Amount)应计算时(Mode !='011'),并(Mode !='012') (Mode not Like '03_')(Mode not Like '05_')来自MainTable

如何实现这一目标?我在很多方面尝试过,但无法按照我想要的方式得到结果.
请帮我.
先感谢您.

sql group-by aggregate-functions sql-server-2008 having-clause

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

无法弄清楚sum(1)在此查询中的工作方式

因此,我试图结合进行查询和做到这一点,我需要弄清楚这是怎么回事。我对SQL Server还是比较陌生,因此我不得不深入研究一些复杂的qrys,有时我会陷入类似这样的简单问题。我的问题是使用了Sum(1)函数,但我不确定如何使用。这意味着我相信它正在计算重复项,但我无法根据它所提供的信息来判断。

这是查询

SELECT 
qryReinsuranceDPA1.POLICY_NO, 
qryReinsuranceDPA1.PHASE_CODE, 
qryReinsuranceDPA1.SUB_PHASE_CODE, 
qryReinsuranceDPA1.ProdType, 
TotalDPA = Sum(case when [SumOfNetDefExtraAdj] Is Null then [SumOfNetDefPremiumAdj] else [SumOfNetDefPremiumAdj] + SumOfNetDefExtraAdj end), 
Sum(1) AS Expr1
FROM qryPolicyListforNYDefPRemAsset_Re RIGHT JOIN qryReinsuranceDPA1
ON 
qryReinsuranceDPA1.POLICY_NO = qryPolicyListforNYDefPRemAsset_Re.POLICY_NO AND 
qryReinsuranceDPA1.PHASE_CODE= qryPolicyListforNYDefPRemAsset_Re.PHASE_CODE AND 
qryReinsuranceDPA1.SUB_PHASE_CODE = qryPolicyListforNYDefPRemAsset_Re.SUB_PHASE_CODE 
GROUP BY qryReinsuranceDPA1.POLICY_NO, 
qryReinsuranceDPA1.PHASE_CODE, 
qryReinsuranceDPA1.SUB_PHASE_CODE, 
qryReinsuranceDPA1.ProdType
--HAVING (((Sum(1))<>1))

GO
Run Code Online (Sandbox Code Playgroud)

这只是它产生的一小部分样本(实际结果约为77,000)

POLICY_NO    PHASE_CODE    SUB_PHASE_CODE    ProdType   TotalDPA       Expr1
228433800    0             1                 TERM       282.324223     1
228439200    0             1                 PERM       53.17048634    1
228439200    6             1                 PERM       10.3805065     1
228441500    0             1                 PERM       526.6883742 …
Run Code Online (Sandbox Code Playgroud)

sql-server sum aggregate-functions

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

在Oracle中选择一个SQL中的2个listagg

我有一个表格形式:

| ID    | COURSE | PASS |
---------------------------
| 1     | 1      | 1      |
| 1     | 2      | 1      |    
| 1     | 3      | 1      |
| 1     | 4      | 0      |
| 1     | 5      | 0      |
Run Code Online (Sandbox Code Playgroud)

我希望表格中的行:

| ID    | FAILED | PASSED |
---------------------------
| 1     | 4,5    | 1,2,3  |
Run Code Online (Sandbox Code Playgroud)

唯一我认为是这样的:

    select NVL(passed.id, failed.id), passed.test, failed.test from 
        (select id, listagg(course, ',') within group (order by course) test from table1 where …
Run Code Online (Sandbox Code Playgroud)

sql oracle aggregate-functions

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