我有一张这样的表:
-----+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+------------
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”,第二行应为“r”。
我无法弄清楚如何在MYSQL中做到这一点。对此有何帮助?
答案 0 :(得分:1)
您似乎正在使用固定值或“r”,“g”和“y”值。如果是这样,这应该对你有用。内部“PQ”(预查询)获取每一行其他数据元素,然后将每列与1 IF相加,它的值分别为“r”,“g”或“y”,分别为3个计数列。
从那时起,我正在使用“Greatest”函数,它返回给定列表中的最高值。如果你有3个相同颜色的3,它们都会被标记为最高......或者即使4/4/1分割,两个也会显示为高计数。
我不知道你的表名,所以我只称它为“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
答案 1 :(得分:0)
我不知道如何在不使用许多查询和临时表的情况下在MySQL中执行您想要的操作。您当然可以更轻松地使用单个查询,并使用数组在PHP中进行排序。
无论如何,你的桌子的组织对于这种目的是错误的。您应该有一个相关的表格,用于存储所有答案(或q_1
至q_9
)。这样,您可以添加任意数量的问题/答案,而无需在主表中创建列。
然后,MySQL将是提取所需结果的完美工具:您将比较行而不是列。