Mysql查询,使用单个查询从三个表中获取记录
我们有三张桌子Mysql查询,使用单个查询从三个表中获取记录,mysql,Mysql,我们有三张桌子 表1-应用程序(id、名称) 表2-appPlayer(id、名称) 表3-appPlayerSession(id、appId、appPlayerId、版本) 我当前的查询是: SELECT (select name from app k where k.id= aps.appId) AS appName,version,appId,count(version) FROM appPlayerSession aps GROUP BY appId,version,appName
表1-应用程序(id、名称)
表2-appPlayer(id、名称)
表3-appPlayerSession(id、appId、appPlayerId、版本) 我当前的查询是:
SELECT (select name from app k where k.id= aps.appId) AS appName,version,appId,count(version) FROM appPlayerSession aps GROUP BY appId,version,appName
我们需要统计同一版本的每个游戏的会话用户数,并且使用单个mysql查询所有用户数据的对象
当前结果使用我的查询,但我们还需要每个应用程序的玩家
由于您尚未给出预期结果,根据您的要求,您可以这样做。它可能会根据您的要求进行增强
SELECT (select name from app k where k.id= aps.appId) AS appName,version,appId,(select P.name from appPlayer P where P.id=aps.appPlayerid) as appPlayerName, count(version) FROM appPlayerSession aps GROUP BY appId,version,appName,appPlayerName
另外,请根据您的要求检查小提琴,因为您没有提供任何数据集,并且是基于我的假设。
根据您新添加的要求创建新Sql-
select X.appname,X.version,X.appid,GROUP_CONCAT(distinct X.appPlayerName order by X.appPlayerName) as Users ,
sum(X.vercount)
from (SELECT (select name from app k where k.id= aps.appId)
AS appName,version,appId,
(select P.name from appPlayer P where P.id=aps.appPlayerid)
as appPlayerName, count(version)as vercount
FROM appPlayerSession aps
GROUP BY appId,version,appName,appPlayerName) X
group by X.appname,X.version,X.appid
新建fiddle-您可以在sql中使用JOIN连接多个表并获取结果 格式如下:
SELECT t1.col,
t3.col
FROM table1
JOIN table2
ON table1.primarykey = table2.foreignkey
JOIN table3
ON table2.primarykey = table3.foreignkey
就你而言:
SELECT app.col,
appPlayer.col,
appPlayerSession.col
FROM app
JOIN appPlayer
ON app.id = appPlayer.appId
JOIN appPlayerSession
ON appPlayer.id = appPlayerSession.appPlayerId
希望这是有帮助的
一个建议。对表名和列名使用camelCase不是标准。snake_案例广受欢迎。看看与“连接”相关的mysql文档:你会找到答案,你应该使用连接。你是对的,尝试连接,但计数呢?我们需要使用单个mysql查询获取所有记录…您可以选择应用程序中的所有信息(id,名称)加入应用程序id上的应用程序播放器表(我希望与应用程序用户信息相关),获取他的姓名,然后您可以根据播放器id加入会话表。将这三个表连接在一起时,每个表将获得一个别名(很可能是单个字符,如appPlayer p),您可以在前面的select查询中引用该别名。在那里,您可以对加入的任何列使用计数功能(例如,选择…计数(s.appPlayerId)…)。在运行appid时再运行一条内部select语句,并将其添加到group by子句中。在编写查询时也要执行别名,因为这将减少读取时的开销quaey@Kandy请您写下查询:D?现在请检查您的答案链接,这里有两个appId 1的条目,同一版本有两个不同的用户。@MuhammadAwaisZulifqar您能根据您的要求在我的小提琴的第三个表格中添加数据集吗。已经添加,请检查@MuhammadAwaisZulifqar您是否可以为所描述的相同内容添加预期输出situation@MuhammadAwaisZulifqar请按照要求检查新sql,如果对您有帮助,也请提供答案。