私はアンドロイド用のアプリケーションを作成していて、かなり単純なSQLite3データベースを持っています(写真参照)が、特定のクエリで多くの問題を抱えています。SQLiteクエリのヘルプ
ここにデータベースの一部です。注:ここには一対多の関係があります。プレーヤーは多くのイベントを持つことができますが、各イベントには1人のプレーヤーしか参加できません。私はすべて選手のリストを持つようにしたいが、私は、彼らはそれが(偽かどうか、すなわちに設定Diagnosed
属性のしているイベントがあるかどうかによって、すべてのプレーヤーのリストを注文する必要が
「診断されていない」イベントを持つすべてのプレイヤーが一番上に、他のすべてのプレイヤーが後に来る)。最新のものよりも複数の「診断されていない」イベントがある場合に使用されます。
これは、クエリの最も難しい部分です。その後、「診断されていない」イベントを持つプレイヤーは、「マグニチュード」属性(int)で注文する必要があり、他のプレイヤー(「未診断」イベントを持たないプレイヤー)は、 。
- プレーヤー< --1未診断のイベント(100大きさ)
- プレーヤー< --2未診断のイベント(最新1つの75大きさ)
- プレーヤー:ここ は私が必要とするリストの例です< - 1未診断のイベント(50の大きさ)
- プレーヤー< - 未診断のイベントはありません(名前:Johnny Appleseed)
- Player < - 未診断イベント(名前:ジム・ゼブラ)
私はこれをやって考えることができる唯一の方法は、2つの別々のクエリ(「診断未確定」の選手や他の皆のために別のもの)を使用することですが、私はドン」これを行う最良の方法だと思います。
ありがとうございます!
編集
[OK]をので、ここでは主に今働いているクエリがあります。
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つの別々のクエリを使用しています( 1つは「未診断」プレイヤー、もう1人は他のプレイヤー向けです)、これを実行する最善の方法はないと思います」「インラインビューとユニオンからなるクエリは、オプティマイザはそのようなクエリでより簡単な時間を持つことがあり、離散サブセットがより明確に表現されているため、読みやすく、保守性に優れています。 – Tim