gpt4 book ai didi

android - 帮助 SQLite 查询

转载 作者:行者123 更新时间:2023-11-29 02:11:00 24 4
gpt4 key购买 nike

我正在为 android 编写一个应用程序并且有一个相当简单的 SQLite3 数据库(参见图片),但是我在处理特定查询时遇到了很多麻烦。

这是数据库的(一部分)。注意:这里是一对多的关系。一个玩家可以有很多事件,但每个事件只能有一个玩家。

Table model

我想要一个包含所有玩家的列表,但我需要根据他们是否有一个具有 Diagnosed 属性集的事件来对所有玩家的列表进行排序是否为假(即所有具有“未诊断”事件的玩家都在顶部,所有其他玩家都在后面)。如果他们有多个“未诊断”事件,则使用最新的事件。

这是查询中最棘手的部分。之后,具有“未诊断”事件的玩家需要按他们的“幅度”属性(整数)排序​​,而其他玩家(任何没有任何“未诊断”事件的玩家)需要按他们的姓氏排序.

这是我需要的列表示例:

  • 玩家 <--1 未确诊事件(100 级)
  • 玩家 <--2 未诊断事件(最新的一个 75 级)
  • 玩家 <--1 未确诊事件(50 级)
  • 玩家 <-- 没有未诊断的事件(姓名:Johnny Appleseed)
  • 玩家 <-- 没有未诊断的事件(姓名:Jim Zebra)

我能想到的唯一方法是使用 2 个单独的查询(一个用于“未诊断”玩家,另一个用于其他所有人),但我认为这不是最好的方法。

提前致谢!

编辑

好的,这是现在最有效的查询。

select player.PlayerID, player.fname, player.lname, stats.diagcount, topmag.magnitude 
from player left outer join (
select playerid, MIN(diagnosed) as diagcount
from events group by playerid
)as stats on player.playerid = stats.playerid
left outer join (
select playerid,max(magnitude) as magnitude
from events group by playerid
)as topmag on player.playerid=topmag.playerid
order by CASE WHEN stats.diagcount Is NULL Then 1 Else 0 End,stats.diagcount,topmag.magnitude,lname;

现在唯一的问题是列表底部的玩家(没有任何诊断事件的玩家)正在按他们最近的事件强度而不是姓氏排序。

最佳答案

类似于:

select player.fname, player.lname, stats.diagcount, topmag.highest
from player left outer join (
select playerid, count(time) as diagcount
from events group by playerid
)as stats on player.playerid = stats.playerid
left outer join (
select playerid,max(magnitude) as highest
from events group by playerid
)as topmag on player.playerid=topmag.playerid
order by stats.diagcount,topmag.highest,lname

不知道在 sqllite 中有什么可能,但我认为类似的东西可能会起作用,如果你收到错误并发布它们,我会看看我能做些什么

如果你想消除对事件被诊断的玩家的大小排序,那么你可以从子查询中消除它们..

select player.fname, player.lname, stats.diagcount, topmag.highest
from player left outer join (
select playerid, count(time) as diagcount
from events
where diagnosed = 0
group by playerid
)as stats on player.playerid = stats.playerid
left outer join (
select playerid,max(magnitude) as highest
from events
where diagnosed = 0
group by playerid
)as topmag on player.playerid=topmag.playerid
order by stats.diagcount,topmag.highest,lname

抱歉,我可能把诊断错误的方式弄错了(因为也许它应该被诊断为 1)

关于android - 帮助 SQLite 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7404288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com