我有2个表 - 一个Account表和一个Users表.每个帐户可以有多个用户.我有一个场景,我想对这两个表执行单个查询/连接,但我想要所有的帐户数据(帐户.*)和只有第一组用户数据(特别是他们的名字).
我没有在我的聚合小组上做"最小"或"最大",而是想做一个"第一次".但是,显然,TSQL中没有"First"聚合函数.
有关如何获取此查询的任何建议?显然,很容易获得Account x Users的笛卡尔积:
SELECT User.Name, Account.* FROM Account, User
WHERE Account.ID = User.Account_ID
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能根据User.ID的顺序从产品中获取第一个用户?
我有一个包含两个字符串类型列(用户名,朋友)的表,对于每个用户名,我想在一行中收集所有朋友,连接为字符串('username1','friends1,friends2,friends3').我知道MySql通过GROUP_CONCAT做到这一点,有没有办法用SPARK SQL做到这一点?
谢谢
我正在尝试获取"分组"记录的第一个和最后一个记录.
更确切地说,我正在做这样的查询
SELECT MIN(low_price), MAX(high_price), open, close
FROM symbols
WHERE date BETWEEN(.. ..)
GROUP BY YEARWEEK(date)
Run Code Online (Sandbox Code Playgroud)
但我想获得该组的第一个和最后一个记录.它可以通过做大量的请求完成,但我有一个非常大的表.
是否有一个(如果可能的话处理时间很短)用MySQL做这个的方法?
我有这个查询来获取PlayerSessions 的数量reconnect = TRUE,分组依据Player.country:
SELECT
country,
COUNT(*) AS with_reconnect
FROM PlayerSession S LEFT JOIN Player P ON (P.id = S.player_id)
WHERE reconnect = TRUE
GROUP BY country
Run Code Online (Sandbox Code Playgroud)
我想修改它不仅显示重新连接的会话计数,还显示总计数,例如:
SELECT
country,
COUNT(*) AS total,
(COUNT WHERE reconnect = TRUE) AS with_reconnect
FROM PlayerSession S LEFT JOIN Player P ON (P.id = S.player_id)
GROUP BY country
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果是这样,那么正确的语法是什么?
我有3张桌子:
users(id, account_balance)
grocery(user_id, date, amount_paid)
fishmarket(user_id, date, amount_paid)
Run Code Online (Sandbox Code Playgroud)
对于具有不同日期和金额的相同user_id,两个fishmarket和grocery表可能有多次出现,或者对于任何给定用户都没有任何内容.当我尝试以下查询时:
SELECT
t1."id" AS "User ID",
t1.account_balance AS "Account Balance",
count(t2.user_id) AS "# of grocery visits",
count(t3.user_id) AS "# of fishmarket visits"
FROM users t1
LEFT OUTER JOIN grocery t2 ON (t2.user_id=t1."id")
LEFT OUTER JOIN fishmarket t3 ON (t3.user_id=t1."id")
GROUP BY t1.account_balance,t1.id
ORDER BY t1.id
Run Code Online (Sandbox Code Playgroud)
它会产生不正确的结果:"1", "12", "12".
但是,当我尝试LEFT JOIN只有一个表时,它会产生正确的结果,无论是访问grocery还是fishmarket访问"1", "3", "4".
我在这做错了什么?
我正在使用PostgreSQL 9.1.
对于我的问题,我们有一个架构,其中一张照片有很多标签和许多评论.因此,如果我有一个查询,我想要所有的注释和标记,它会将行相乘.因此,如果一张照片有2个标签和13条评论,我会为这张照片获得26行:
SELECT
tag.name,
comment.comment_id
FROM
photo
LEFT OUTER JOIN comment ON comment.photo_id = photo.photo_id
LEFT OUTER JOIN photo_tag ON photo_tag.photo_id = photo.photo_id
LEFT OUTER JOIN tag ON photo_tag.tag_id = tag.tag_id
Run Code Online (Sandbox Code Playgroud)

这对大多数事情来说都很好,但这意味着如果我GROUP BY和那时json_agg(tag.*),我得到第一个标签的13个副本和第二个标签的13个副本.
SELECT json_agg(tag.name) as tags
FROM
photo
LEFT OUTER JOIN comment ON comment.photo_id = photo.photo_id
LEFT OUTER JOIN photo_tag ON photo_tag.photo_id = photo.photo_id
LEFT OUTER JOIN tag ON photo_tag.tag_id = tag.tag_id
GROUP BY photo.photo_id
Run Code Online (Sandbox Code Playgroud)

相反,我想要一个只有'郊区'和'城市'的数组,如下所示:
[
{"tag_id":1,"name":"suburban"},
{"tag_id":2,"name":"city"}
]
Run Code Online (Sandbox Code Playgroud)
我可以json_agg(DISTINCT tag.name),但是当我想要整个行作为json时,这只会产生一个标签名称数组.我想json_agg(DISTINCT ON(tag.name) …
我有一个名为GUYS(ID,NAME,PHONE)的表,我需要添加一个有多少人具有相同名称的计数,同时显示所有这些,所以我不能将它们分组.例:
ID NAME PHONE
1 John 335
2 Harry 444
3 James 367
4 John 742
5 John 654
Run Code Online (Sandbox Code Playgroud)
想要的输出应该是
ID NAME PHONE COUNT
1 John 335 3
2 Harry 444 1
3 James 367 1
4 John 742 3
5 John 654 3
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?我只是设法让很多人有不同的数量.
谢谢
我需要函数,它返回字符串列表.
我有这样的表中的数据:
Id MyString
------------------------
1 First
2 Second
3 Third
4 Fourth
Run Code Online (Sandbox Code Playgroud)
我需要这样的函数(这样的东西在oracle中工作):
select LISTAGG(MyString, ', ') as myList where id < 4
Run Code Online (Sandbox Code Playgroud)
返回的内容如下:
myList
------------------------
First, Second, Third
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我想在分组时将两列聚合成一个"数组".
假设一个像这样的表:
friends_map:
=================================
user_id friend_id confirmed
=================================
1 2 true
1 3 false
2 1 true
2 3 true
1 4 false
Run Code Online (Sandbox Code Playgroud)
我想从user_id中选择此表和group并获取friend_id并确认为以逗号分隔的连接值.
目前我有这个:
SELECT user_id, array_agg(friend_id) as friends, array_agg(confirmed) as confirmed
FROM friend_map
WHERE user_id = 1
GROUP BY user_id
Run Code Online (Sandbox Code Playgroud)
这让我:
=================================
user_id friends confirmed
=================================
1 [2,3,4] [t, f, f]
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到:
=================================
user_id friends
=================================
1 [ [2,t], [3,f], [4,f] ]
Run Code Online (Sandbox Code Playgroud) 如何在T-SQL中对位列使用函数SUM()?
当我尝试这样做时,如下所示:
SELECT SUM(bitColumn) FROM MyTable;
Run Code Online (Sandbox Code Playgroud)
我收到错误:
操作数数据类型位对于sum运算符无效.
sql ×6
mysql ×4
postgresql ×3
t-sql ×2
apache-spark ×1
arrays ×1
count ×1
distinct ×1
json ×1
left-join ×1
sql-server ×1
subquery ×1