我有一般的查询,例如:
SELECT col1, col2, col3, col4
FROM Table1 AS t1
GROUP BY col1, col2, col3, col4
Run Code Online (Sandbox Code Playgroud)
它将返回一个类似于以下内容的表:
col1 col2 col3 col4
data1 data2 data3 data4
data1 data2 data3 data5
data10 data11 data12 data13
data10 data11 data12 data14
data10 data11 data12 data15
Run Code Online (Sandbox Code Playgroud)
我需要获取col1的计数以显示data1返回两次而data10返回三次.该表应如下所示:
col1 col2 col3 col4 Count
data1 data2 data3 data4 2
data1 data2 data3 data5 2
data10 data11 data12 data13 3
data10 data11 data12 data14 3
data10 data11 data12 data15 3
Run Code Online (Sandbox Code Playgroud)
我在select语句中尝试了count(*),但这不起作用.
我必须找到一对学生,他们从拥有studentID和的表中选择完全相同的课程courseID.
studentID | courseID
1 1
1 2
1 3
2 1
3 1
3 2
3 3
Run Code Online (Sandbox Code Playgroud)
查询应该返回(1, 3).
结果也不应该有重复的行,例如(1,3)和(3,1).
mysql sql postgresql aggregate-functions relational-division
我正在尝试使用由另一列分组的该列的最大值来更新表中的列。
例如,假设我们有一个名为 transactions 的表,其中包含两列:quantity和item_name。而无论出于何种原因,我们要设置quantity等于最大quantity发现每个item_name。
我很不擅长在 SQL 中做这样的事情,但这是我到目前为止所拥有的:
UPDATE transactions
SET
quantity = subquery.quantity
FROM (select max(quantity), item_name
from transaction group by item_name) AS subquery
WHERE and item_name = subquery.item_name;
Run Code Online (Sandbox Code Playgroud) 我正在使用 Postgresql 8.4。我有一张这样的表:
type | value
------+-------
1 | 5
2 | 6
1 | 4
3 | 10
Run Code Online (Sandbox Code Playgroud)
我想写一个选择,它会给我最小值和最大值,以及所有类型的聚合integer[]。想要的结果应该是:
min | max | types
-----+-----+-----------
4 | 10 | {1, 2, 3}
Run Code Online (Sandbox Code Playgroud)
为了获得最小值和最大值,我已经有了:
SELECT MIN(value) min, MAX(value) max FROM table;
Run Code Online (Sandbox Code Playgroud)
要在独立选择中获取类型,我使用:
SELECT array_agg(DISTINCT type) types FROM table;
Run Code Online (Sandbox Code Playgroud)
我怎样才能将这些组合成一个选择(这不是太低效)?
如何在一个查询中执行以下操作:
如果我有两个这样的问题
SELECT SUM(value +sal) AS sump
FROM loans
WHERE active_flag = 1
Run Code Online (Sandbox Code Playgroud)
SELECT SUM(value +sal) AS sumn
FROM loans
WHERE active_flag = 2
Run Code Online (Sandbox Code Playgroud)
我想得到sump并sumn在同一个查询中
示例数据:
test,test2
----------
a,qwer
b,wert
c,erty
d,rtuy
d,tyui
e,yuio
e,uiop
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个返回表中唯一值的查询:
SELECT
test
FROM aatest
GROUP BY test
HAVING (COUNT(test) = 1)
Run Code Online (Sandbox Code Playgroud)
这有效并返回 a、b 和 c,因为 d 和 e 不是唯一的。
但我也想打印出 test2 所以我试过:
select
test,
test2
from aatest
GROUP BY test
HAVING (COUNT(test) = 1)
Run Code Online (Sandbox Code Playgroud)
但我得到了错误。
我想知道是否有某种方法为Spark数据帧指定自定义聚合函数.如果我有一个包含2列的表id,value我想groupBy id并将值聚合到每个列表中,value如下所示:
从:
john | tomato
john | carrot
bill | apple
john | banana
bill | taco
Run Code Online (Sandbox Code Playgroud)
至:
john | tomato, carrot, banana
bill | apple, taco
Run Code Online (Sandbox Code Playgroud)
这在数据帧中是否可行?我问的是数据帧,因为我正在将数据作为一个orc文件读取,并将其作为数据帧加载.我认为将它转换为RDD是无效的.
scala group-by aggregate-functions apache-spark apache-spark-sql
我想使用列名数组作为输入聚合Spark数据框,同时保留列的原始名称.
df.groupBy($"id").sum(colNames:_*)
Run Code Online (Sandbox Code Playgroud)
这有效,但无法保留名称.受到这里找到的答案的启发,我没有尝试过这个:
df.groupBy($"id").agg(sum(colNames:_*).alias(colNames:_*))
error: no `: _*' annotation allowed here
Run Code Online (Sandbox Code Playgroud)
它可以像单个元素一样
df.groupBy($"id").agg(sum(colNames(2)).alias(colNames(2)))
Run Code Online (Sandbox Code Playgroud)
如何才能使整个阵列发生这种情况?
带有Legacy SQL的BigQuery有一个非常方便的QUANTILES功能,可以快速获取表中值的直方图,而无需手动指定存储桶.
我在标准SQL中可用的聚合函数中找不到一个很好的等价物.我是否遗漏了一些显而易见的东西,或者其他什么是模仿它的标准方法?
aggregate-functions histogram google-bigquery bigquery-standard-sql
假设我有一个包含一列(IDNUMBER)的数据集,如下所示:
IDNUMBER
1
2
3
1001
1002
1003
1004
1005
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望将此列中存在的任何数据分成两列,表示连续值的范围.
START, END
1, 3
1001, 1005
Run Code Online (Sandbox Code Playgroud)
我可以用光标或循环来做到这一点,但是有基于集合的解决方案吗?
谢谢.
sql ×6
postgresql ×4
apache-spark ×2
scala ×2
sql-server ×2
group-by ×1
histogram ×1
informix ×1
mysql ×1
sql-update ×1
t-sql ×1