我目前正在做一项家庭作业,要求进行选择,以拉出包含与所有其他记录相比最大值的特定属性的元素.我在线阅读了一些引用称为"最大"的"聚合"关系代数函数,但它们没有描述它如何使用基本运算符.如何选择包含最大值的属性?
我使用MySQL,我有两个表:
master_table
stock_bal
主表具有重复ORDERNO和ITEM值.我总是QTY使用SQL'GROUP BY'子句.
我需要BAL_QTY从ITEM(master_table)的SUM中扣除/减去.我QTY使用查询得到SUM 值(实际上有很多行).
我有一个工作查询,按硬件模型和结果对数据进行分组,但问题是有很多"结果".我试图将其减少到"如果结果= 0然后保持为0,否则将其设置为1".这通常有效,但我最终得到:
day | name | type | case | count
------------+----------------+------+------+-------
2013-11-06 | modelA | 1 | 0 | 972
2013-11-06 | modelA | 1 | 1 | 42
2013-11-06 | modelA | 1 | 1 | 2
2013-11-06 | modelA | 1 | 1 | 11
2013-11-06 | modelB | 1 | 0 | 456
2013-11-06 | modelB | 1 | 1 | 16
2013-11-06 | modelB | 1 | 1 | 8
2013-11-06 …Run Code Online (Sandbox Code Playgroud) 当我在手工构造的数据集上使用FIRST_VALUE时,我得到一个结果,当我在由左连接产生的数据集上使用它时,我得到了不同的结果 - 即使数据集在我看来包含完全相同的数据值.我用下面的简单数据集重现了这个问题.
有人能告诉我,如果我误解了什么吗?
此SQL生成预期结果,FIRST_VALUE为NULL且LAST_VALUE为30.
SELECT
agroup,
aval,
FIRST_VALUE(aval) OVER (PARTITION BY agroup ORDER BY aval ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) fv,
LAST_VALUE(aval) OVER (PARTITION BY agroup ORDER BY aval ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) lv
FROM
(
SELECT 1 agroup, 10 aval
UNION ALL SELECT 1, NULL
UNION ALL SELECT 1, 30
) T
Run Code Online (Sandbox Code Playgroud)
此SQL使用LEFT JOIN导致与上面相同的数据集,但FIRST_VALUE似乎忽略NULL.
SELECT
agroup,
aval,
FIRST_VALUE(aval) OVER (PARTITION BY agroup ORDER BY aval ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) fv, …Run Code Online (Sandbox Code Playgroud) t-sql sql-server aggregate-functions window-functions sql-server-2012
当使用SQL MIN()函数和GROUP BY时,任何其他列(不是MIN列,或GROUP BY列之一)是否匹配匹配MIN行中的数据?
例如,给定一个包含部门名称,员工姓名和薪水的表格:
SELECT MIN(e.salary), e.* FROM employee e GROUP BY department
Run Code Online (Sandbox Code Playgroud)
显然,我会得到两个好的专栏,最低薪水和部门.员工姓名(以及任何其他员工字段)是否来自同一行?即MIN(薪水)行?
我知道很可能有两名员工的工资相同(和最低),但我(现在)所关心的只是获得(或单一)最便宜员工的所有信息.
这会选择最便宜的推销员吗?
SELECT min(salary), e.* FROM employee e WHERE department = 'sales'
Run Code Online (Sandbox Code Playgroud)
基本上,我可以确定与MIN()函数一起返回的数据是否与具有该最小值的(或单个)记录匹配?
如果数据库很重要,我正在使用MySql.
问题:我想编写一个自定义聚合函数,用于连接group by上的字符串.
这样我就能做到
SELECT SUM(FIELD1) as f1, MYCONCAT(FIELD2) as f2
FROM TABLE_XY
GROUP BY FIELD1, FIELD2
Run Code Online (Sandbox Code Playgroud)
我找到的只是SQL CRL聚合函数,但我需要SQL,没有CLR.
编辑:1
查询应如下所示:
SELECT SUM(FIELD1) as f1, MYCONCAT(FIELD2) as f2
FROM TABLE_XY
GROUP BY FIELD0
Run Code Online (Sandbox Code Playgroud)
编辑2:
没有CLR,这是不可能的.
但是,可以修改旁观者的子选择答案,因此不会对特殊字符进行XML编码.
对此的微妙更改是在"FOR XML PATH"之后添加:
TYPE
).value('.[1]', 'nvarchar(MAX)')
Run Code Online (Sandbox Code Playgroud)
这里举几个例子
DECLARE @tT table([A] varchar(200), [B] varchar(200));
INSERT INTO @tT VALUES ('T_A', 'C_A');
INSERT INTO @tT VALUES ('T_A', 'C_B');
INSERT INTO @tT VALUES ('T_B', 'C_A');
INSERT INTO @tT VALUES ('T_C', 'C_A');
INSERT INTO @tT VALUES ('T_C', 'C_B');
INSERT INTO …Run Code Online (Sandbox Code Playgroud) sql sql-server-2005 aggregate-functions aggregation sql-server-2008
我有一个两列的DataFrame,ID类型Int和Vec类型Vector(org.apache.spark.mllib.linalg.Vector).
DataFrame如下所示:
ID,Vec
1,[0,0,5]
1,[4,0,1]
1,[1,2,1]
2,[7,5,0]
2,[3,3,4]
3,[0,8,1]
3,[0,0,1]
3,[7,7,7]
....
Run Code Online (Sandbox Code Playgroud)
我想groupBy($"ID")通过对向量求和来对每个组内的行应用聚合.
上述示例的所需输出将是:
ID,SumOfVectors
1,[5,2,7]
2,[10,8,4]
3,[7,15,9]
...
Run Code Online (Sandbox Code Playgroud)
可用的聚合函数将不起作用,例如,df.groupBy($"ID").agg(sum($"Vec")将导致ClassCastException.
如何实现自定义聚合函数,允许我进行向量或数组的总和或任何其他自定义操作?
scala aggregate-functions apache-spark apache-spark-sql apache-spark-ml
我想知道将列更新为+1的最简单方法是什么?我将根据用户提交新帖子的时间更新类别的帖子数.
谢谢.
我理解tapply()在R中做了什么.但是,我无法从文档中解析它的描述:
Apply a Function Over a "Ragged" Array
Description:
Apply a function to each cell of a ragged array, that is to each
(non-empty) group of values given by a unique combination of the
levels of certain factors.
Usage:
tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
当我想到tapply时,我想到了sql中的group by.您可以通过INDEX中的并行因子级别将X中的值组合在一起,并将FUN应用于这些组.我已经阅读了100次tapply的描述,仍然无法弄清楚它所说的如何映射到我如何理解tapply.也许有人可以帮我解析一下吗?
我的应用程序有一个Events带有时间戳事件的表.
我需要在每个最近的N时间间隔内报告事件的数量.对于不同的报告,间隔可以是"每周"或"每天"或"每小时"或"每15分钟间隔".
例如,用户可以显示他们每周,每天,每小时或每季度收到的订单数量.
1)我的偏好是动态地执行单个SQL查询(我正在使用Postgres)按任意时间间隔进行分组.有没有办法做到这一点?
2)一种简单但丑陋的暴力方法是对按时间戳排序的开始/结束时间帧内的所有记录执行单个查询,然后使用方法按任意间隔手动构建计数.
3)另一种方法是在事件表中为每个区间添加单独的字段并静态存储一个the_week the_day,the_hour和the_quarter_hour字段,这样我就可以在创建记录时(一次)进行"点击",而不是每次报告该字段时.
这里有什么最好的做法,因为我可以根据需要修改模型和预先存储间隔数据(尽管只需要将表格宽度加倍);
sql postgresql ruby-on-rails aggregate-functions generate-series
sql ×7
mysql ×3
postgresql ×2
aggregate ×1
aggregation ×1
apache-spark ×1
case ×1
group-by ×1
max ×1
r ×1
scala ×1
sql-server ×1
sql-update ×1
t-sql ×1