我正在为android编写一个应用程序,并且有一个相当简单的SQLite3数据库(请参阅图片),但是我遇到了很多特定查询的麻烦。帮助SQLite查询
这是数据库的一部分。注意:这里有一对多的关系。一名球员可以有许多比赛,但每场比赛只有一名球员。
我希望有所有的球员名单,但我需要按他们是否有一个具有它的Diagnosed
属性设置为false或没有(即一个事件的所有球员这个名单所有参加“未确诊”事件的玩家都会进入最高级别,所有其他玩家都会参加)。如果他们有超过一个“未被诊断”的事件比使用最新的事件。
这是查询最棘手的部分。之后,具有“未诊断”事件的玩家需要按照他们的“量级”属性(int)进行排序,而其他玩家(没有任何“未诊断”事件的玩家)需要按他们的姓氏。
这里的名单,我需要的例子:
- 球员< --1未确诊的情况下(100级)
- 球员< --2不明原因的事件(最新的一个75级)
- 播放器< --1未确诊的情况下(50级)
- 球员< - 无未确诊的活动(产品名称:约翰尼苹果核战记)
- 播放器< - 无未确诊的活动(产品名称:吉姆斑马)
我能想到这样做的唯一方法是通过使用两个独立的查询(一个为“不明原因”的玩家,另一个用于其他人),但我不我认为这是做这件事的最好方法。
在此先感谢!
编辑
好了,所以这里是一个的大多是现在的工作查询。现在
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;
唯一的问题是,在玩家列表(玩家没有任何诊断事件)的底部被其最近的事件幅度,而不是按姓氏排序。
'“我能想到这样做的唯一方法是通过使用2个单独的查询(一个用于“未确诊”的玩家,另一个用于其他人),但我不认为这是做这件事的最佳方式。“不要认为由内联视图和联合组成的查询在某种程度上有缺陷或会表现不佳 - 优化器有时可以用这种查询更容易的时间,而且它们当然更清晰且可维护,因为离散子集更清晰地表示。 – Tim