我正在爲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