0

次のようなテーブルがあります。

-----+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+------------
r_id |  r_user| module | q_1 | q_2 | q_3 | q_4 | q_5 | q_6 | q_7 | q_8 |  q_9
-----+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+------------
 1   |  test  | 1      | g   | r   | r   | y   | g   | g   | y   | r   |  g
-----+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+------------
 2   |  test-2| 1      | r   | r   | g   | r   | r   | y   | y   | r   |  g

各行の最大共通値を決定する方法はありますか? たとえば、最初の行の結果は "g" になり、2 番目の行の結果は "r" になります。

MYSQL でそれを行う方法がわかりません。それについて何か助けはありますか?

4

2 に答える 2

1

固定値または「r」、「g」、および「y」値を使用しているようです。もしそうなら、これはあなたのために働くはずです。内側の「PQ」(プレクエリ)は、各行の他のデータ要素を取得し、各列を1つのIFで合計します。その値は、それぞれ「r」、「g」、または「y」であり、3つのカウント列になります。

それから、提供された特定のリストから最高値を返す「Greatest」関数を使用しています。3 つすべてが同じ色の 3 つを持っている場合、それらはすべて最高としてフラグが付けられます... または、4/4/1 分割の場合でも、2 つが高カウントとして表示されます。

私はあなたのテーブル名を知らなかったので、単に「freq1」と呼びました

select
      PQ.r_id,
      PQ.r_user,
      PQ.module,
      PQ.gCnt,
      PQ.rCnt,
      PQ.yCnt,
      if( PQ.gCnt = greatest( PQ.gCnt, PQ.rCnt, PQ.yCnt ), 'yes', '   ' ) as HighG,
      if( PQ.rCnt = greatest( PQ.gCnt, PQ.rCnt, PQ.yCnt ), 'yes', '   ' ) as HighR,
      if( PQ.yCnt = greatest( PQ.gCnt, PQ.rCnt, PQ.yCnt ), 'yes', '   ' ) as HighY,
      greatest( PQ.gCnt, PQ.rCnt, PQ.yCnt ) as HighCnt
   from
( select 
      r_id, r_user, module,
        if( q_1 = 'g', 1, 0 )
      + if( q_2 = 'g', 1, 0 )
      + if( q_3 = 'g', 1, 0 )
      + if( q_4 = 'g', 1, 0 )
      + if( q_5 = 'g', 1, 0 )
      + if( q_6 = 'g', 1, 0 )
      + if( q_7 = 'g', 1, 0 )
      + if( q_8 = 'g', 1, 0 )
      + if( q_9 = 'g', 1, 0 ) as gCnt,
        if( q_1 = 'r', 1, 0 )
      + if( q_2 = 'r', 1, 0 )
      + if( q_3 = 'r', 1, 0 )
      + if( q_4 = 'r', 1, 0 )
      + if( q_5 = 'r', 1, 0 )
      + if( q_6 = 'r', 1, 0 )
      + if( q_7 = 'r', 1, 0 )
      + if( q_8 = 'r', 1, 0 )
      + if( q_9 = 'r', 1, 0 ) as rCnt,
        if( q_1 = 'y', 1, 0 )
      + if( q_2 = 'y', 1, 0 )
      + if( q_3 = 'y', 1, 0 )
      + if( q_4 = 'y', 1, 0 )
      + if( q_5 = 'y', 1, 0 )
      + if( q_6 = 'y', 1, 0 )
      + if( q_7 = 'y', 1, 0 )
      + if( q_8 = 'y', 1, 0 )
      + if( q_9 = 'y', 1, 0 ) as yCnt
   from freq1 ) PQ

作成された結果

r_id   r_user  module  gCnt   rCnt   yCnt   HighG   HighR   HighY   HighCnt
1      test    1       4      3      2      yes                     4
2      test-2  1       2      5      2              yes             5
于 2013-09-29T03:07:55.343 に答える