帮助SQLite查询

时间:2011-09-13 15:15:45

标签: android sql sqlite

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

这是数据库的一部分。注意:这里有一对多的关系。玩家可以有很多活动,但每个活动只有1名玩家​​。

Table model

我想要一个所有玩家的列表,但是我需要根据他们是否有一个将Diagnosed属性设置为false的事件来订购所有玩家的列表。不是(即所有有“未确诊”事件的球员都排在最前面,所有其他球员都排在前面)。如果他们有超过一个“未确诊”事件而不是最新使用的事件。

这是查询中最棘手的部分。之后,“Undiagnosed”事件的玩家需要按照他们的“Magnitude”属性(int)进行排序,其他玩家(任何没有任何“未确诊”事件的玩家)需要按姓氏排序。

以下是我需要的列表示例:

  • 玩家< - 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;

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

1 个答案:

答案 0 :(得分:1)

类似的东西:

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)