固定値または「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