Questions tagged «aggregate-functions»

集合函数是SQL函数的一个子集,这些SQL函数从多个输入行中计算一个值,主要用于带有“ GROUP BY”子句的“ SELECT”查询中。实际上,所有现代RDBMS都具有聚合功能。典型示例包括COUNT(),SUM(),MIN(),MAX()和AVG()。


7
必须出现在GROUP BY子句中或在聚合函数中使用
我有一张桌子,看起来像这个呼叫者“ makerar” cname | wmname | avg --------+-------------+------------------------ canada | zoro | 2.0000000000000000 spain | luffy | 1.00000000000000000000 spain | usopp | 5.0000000000000000 我想为每个cname选择最大平均值。 SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname; 但我会出错 ERROR: column "makerar.wmname" must appear in the GROUP BY clause or be used in an aggregate …

30
在SQL Server中计算中位数的函数
根据MSDN,Median在Transact-SQL中不能作为聚合函数使用。但是,我想找出是否可以创建此功能(使用创建聚合功能,用户定义的功能或其他方法)。 这样做的最佳方法是什么(如果可能的话)-允许在聚合查询中计算中值(假设数字数据类型)?

6
将多个功能应用于多个groupby列
该文档展示了如何使用输出列名称作为键的字典一次在groupby对象上应用多个功能: In [563]: grouped['D'].agg({'result1' : np.sum, .....: 'result2' : np.mean}) .....: Out[563]: result2 result1 A bar -0.579846 -1.739537 foo -0.280588 -1.402938 但是,这仅适用于Series groupby对象。同样,当将字典类似地传递到groupby DataFrame时,它期望键是将应用该函数的列名。 我想做的是对多个列应用多个功能(但是某些列将被多次操作)。同样,某些函数将依赖于groupby对象中的其他列(如sumif函数)。我当前的解决方案是逐列进行操作,并使用类似于上面代码的代码,对依赖其他行的函数使用lambda。但这要花很长时间,(我认为花很长时间才能遍历groupby对象)。我必须对其进行更改,以便一次运行即可遍历整个groupby对象,但是我想知道熊猫中是否有内置的方法可以使此操作更加简洁。 例如,我尝试过类似 grouped.agg({'C_sum' : lambda x: x['C'].sum(), 'C_std': lambda x: x['C'].std(), 'D_sum' : lambda x: x['D'].sum()}, 'D_sumifC3': lambda x: x['D'][x['C'] == 3].sum(), ...) 但正如我所料,我收到一个KeyError(因为如果agg从DataFrame调用,则键必须是一列)。 是否有任何内置方法可以执行我想做的事情,或者可能添加了此功能,或者我只需要手动遍历groupby? 谢谢

7
SQL OVER()子句-何时以及为何有用?
USE AdventureWorks2008R2; GO SELECT SalesOrderID, ProductID, OrderQty ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total' ,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Avg' ,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Count' ,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Min' ,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Max' FROM Sales.SalesOrderDetail WHERE SalesOrderID IN(43659,43664); 我读到该条款,但我不明白为什么需要它。该功能Over做什么?怎么Partitioning By办?为什么我不能用文字查询Group By SalesOrderID?

6
如何在COUNT个汇总中包含“零” /“ 0”结果?
我刚刚陷入了一些SQL问题。我认为我不能很好地表达问题-所以让我告诉你。 我有两个桌子,一个叫人,一个叫约会。我正在尝试返回一个人的约会数量(包括零个约会)。约会包含person_id和,并且person_id每个约会都有一个。因此COUNT(person_id)是明智的做法。 查询: SELECT person_id, COUNT(person_id) AS "number_of_appointments" FROM appointment GROUP BY person_id; 将正确返回person_id拥有的约会数量。但是,约会不为0的人不会返回(显然是因为他们不在该表中)。 调整语句以从人员表中获取person_id可以得到以下信息: SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments" FROM appointment JOIN person ON person.person_id = appointment.person_id GROUP BY person.person_id; 但是,这仍然只会返回有约会的person_id,而不是我想要的有0个约会的人的返回! 有什么建议吗?

7
连接/聚合字符串的最佳方法
我正在寻找一种将不同行中的字符串聚合为一行的方法。我希望在许多不同的地方进行此操作,因此具有促进此操作的功能会很好。我已经尝试过使用COALESCE和解决方案FOR XML,但它们只是不适合我。 字符串聚合将执行以下操作: id | Name Result: id | Names -- - ---- -- - ----- 1 | Matt 1 | Matt, Rocks 1 | Rocks 2 | Stylus 2 | Stylus 我看过CLR定义的聚合函数来代替COALESCE和FOR XML,但是显然SQL Azure 不支持CLR定义的东西,这让我很痛苦,因为我知道能够使用它可以解决很多问题。我的问题。 有什么可能的解决方法,或者类似的最优方法(可能不如CLR最优,但是我会尽力而为)来聚合我的东西?

6
MySQL的“分组依据”和“排序依据”
我希望能够从电子邮件表中选择一堆行并将其按发件人分组。我的查询如下所示: SELECT `timestamp`, `fromEmail`, `subject` FROM `incomingEmails` GROUP BY LOWER(`fromEmail`) ORDER BY `timestamp` DESC 该查询几乎可以按我需要的方式工作-它选择按电子邮件分组的记录。问题在于主题和时间戳与特定电子邮件地址的最新记录不符。 例如,它可能返回: fromEmail: john@example.com, subject: hello fromEmail: mark@example.com, subject: welcome 当数据库中的记录是: fromEmail: john@example.com, subject: hello fromEmail: john@example.com, subject: programming question fromEmail: mark@example.com, subject: welcome 如果“编程问题”主题是最新的,则如何在对电子邮件进行分组时让MySQL选择该记录?

24
Oracle中的LISTAGG返回不同的值
Наэтотвопросестьответына 堆栈溢出нарусском:КакфункциейLISTAGGвернутьзначениябезповторений? 我正在尝试LISTAGG在Oracle中使用该功能。我只想获取该列的不同值。有没有一种方法可以只获取不同的值而无需创建函数或过程? col1 col2创建者 1 2史密斯 1 2约翰 1 3阿杰 1 4羊 1 5杰克 我需要选择col1和LISTAGGcol2(不考虑第3列)。当我这样做时,我得到如下结果LISTAGG:[2,2,3,4,5] 我需要在此处删除重复的“ 2”;我只需要col2对col1的不同值。

5
避免在PostgreSQL中被零除
我想在SELECT子句中执行除法。当我加入一些表并使用聚合函数时,我通常将null或零值用作分隔符。到目前为止,我只想出这种避免被零值和空值相除的方法。 (CASE(COALESCE(COUNT(column_name),1)) WHEN 0 THEN 1 ELSE (COALESCE(COUNT(column_name),1)) END) 我想知道是否有更好的方法?

12
在同一列上使用多个WHERE条件进行选择
好的,我想我可能会忽略一些显而易见的/简单的事情...但是我需要编写一个查询,该查询仅返回与同一列上的多个条件匹配的记录... 我的表是一个非常简单的链接设置,用于将标志应用于用户... ID contactid flag flag_type ----------------------------------- 118 99 Volunteer 1 119 99 Uploaded 2 120 100 Via Import 3 121 100 Volunteer 1 122 100 Uploaded 2 等等...在这种情况下,您会看到联系人99和100都被标记为“志愿者”和“已上传” ... 我需要做的是返回仅与通过搜索表单输入的多个条件相匹配的那些contactid ... contactid必须与所有选择的标志匹配...在我看来,SQL应该类似于: SELECT contactid WHERE flag = 'Volunteer' AND flag = 'Uploaded'... 但是...什么也没返回...我在这里做错了什么?


4
如何对data.frame列值求和?
我有一个包含几列的数据框;一些数字和一些字符。如何计算特定列的总和?我GOOGLE了这一点,我看到无数的功能(sum,cumsum,rowsum,rowSums,colSums,aggregate,apply),但我不能让这一切的感觉。 例如,假设我有一个people包含以下各列的数据框 people <- read( text = "Name Height Weight Mary 65 110 John 70 200 Jane 64 115", header = TRUE ) … 如何获得所有权重的总和?

9
没有汇总功能的GROUP BY
我试图了解没有聚合功能的GROUP BY (oracle dbms的新功能)。 它如何运作? 这是我尝试过的。 我将在其上运行SQL的EMP表。 SELECT ename , sal FROM emp GROUP BY ename , sal SELECT ename , sal FROM emp GROUP BY ename; 结果 ORA-00979:不是GROUP BY表达式 00979。00000-“不是GROUP BY表达式” *原因: *操作: 错误:行:397列:16 SELECT ename , sal FROM emp GROUP BY sal; 结果 ORA-00979:不是GROUP BY表达式 00979。00000-“不是GROUP BY表达式” *原因: …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.