0

今日、私はいくつかの大きな助けを受け取りましたが、クエリにそれを実装する必要があるときは、思ったよりも困難でした。私の実際のクエリには、いくつかの左結合が含まれています。

T3M列とT1G列に基づいて10-1のランキングを示すT3MOutputとT1GOutputの2つの列を追加したいと思います。そこにある最も大きい値はランキングスケールで10を取得し、最も低い(負の値)は1を取得する必要があります。競馬は、開始時に15頭未満である可能性があります。10-1を受け取った10の最良の値の後、残りも値1を取得する必要があります。

フィドル:http ://sqlfiddle.com/#!2 / 9c5fc / 4

このコード行または他のソリューションをどこに実装する必要がありますか?全体を通して値1しか得られません。

(SELECT @row:=11 r) rows

すべてのコードは次のとおりです。

SELECT

base.number as NR,
rank.rpo AS RPO,
rank.rsp AS RSP,
rank.rsv AS RSV,
timer.t3m AS T3M, CASE WHEN @row>1 THEN @row:=@row-1 ELSE 1 END T3MOutput,
timer.t1g AS T1G, CASE WHEN @row>1 THEN @row:=@row-1 ELSE 1 END T1GOutput

FROM round
LEFT JOIN base 
ON round.id = base.round_id 

LEFT JOIN rank 
ON  round.id = rank.round_id AND rank.number = base.number

LEFT JOIN timer    
ON round.id = timer.round_id AND timer.number = base.number

ORDER BY nr 
4

3 に答える 3

1

初め

SELECT MIN(timer.t3m) AS MinT3M, MAX(timer.t3m) AS MaxT3M,
  MIN(timer.t1g) AS MinT1G, MAX(timer.t1g) AS MaxT1G
  FROM round INNER JOIN timer ON round.id = timer.round_id
  WHERE round.round_date = '2013-03-22' 
    AND round.gameform = 'V65'
    AND round.gameform_info = 'V65-1'
    AND round.gameform not like "OSPEC";

次に、私がこれを入力しているときにリチャードが提案した計算を使用できます。

データを使用するSQLフィドルをここで参照してください。

于 2013-03-25T20:15:40.293 に答える
0

これらの値をランク付けしようとしていると仮定すると、これを行う1つの可能な方法は、最初にT3MとT1Gの最小値と最大値を決定し、次に次のようなものを使用することです。

SELECT ...,
       ((T3M-@T3M_Min)/(@T3M_Max-@T3M_Min))*9+1 as T3MOutput,
       ((T1G-@T1G_Min)/(@T1G_Max-@T1G_Min))*9+1 as T1GOutput

整数値への変換が必要になる場合があります

于 2013-03-25T20:12:18.040 に答える
0

それは少しトリッキーです、多分これはあなたが探しているものですか?

SELECT
  q2.*,
  CASE WHEN @row>1 AND T1G is not NULL THEN @row:=@row-1 ELSE 1 END T1GOutput
FROM (

SELECT
  q1.*,
  CASE WHEN @row>1 AND T3M is not NULL THEN @row:=@row-1 ELSE 1 END T3MOutput
FROM (
SELECT
  base.number as NR,
  rank.rpo as RPO,
  rank.rsp as RSP,
  rank.rsv as RSV,
  timer.t3m as T3M,
  timer.t1g AS T1G
FROM

  round LEFT JOIN base 
  ON round.id = base.round_id 

  LEFT JOIN rank 
  ON round.id = rank.round_id and rank.number = base.number

  LEFT JOIN timer    
  ON round.id = timer.round_id and timer.number = base.number

order by T3M DESC
  ) q1, (SELECT @row:=11) rows
) q2,  (SELECT @row:=11) rows
ORDER BY
  T1G

こちらのフィドルをご覧ください。

于 2013-03-26T16:29:03.183 に答える