2013-08-21 21 views
0

我想将列的最大3个结果插入3个不同的列。如何在不同列中插入最大3个结果?

SELECT 
    t.name, 
    m.top_marks 
FROM 
    table_name t, 
    (SELECT 
     marks 
    FROM table_name 
    WHERE rownum <=3 
    ORDER BY marks DESC) m 
GROUP BY column_name DESC; 

这可以帮助我获得前3分的权利吗?但是如果我想将前3个结果存储在3个新列中呢? Marks1,marks2,marks3?

+0

[枢轴] (http://stackoverflow.com/questions/7674786/mysql-pivot-table)?我想你可能需要添加像行号字段这样的工作。 – Dukeling

回答

0

我不能说我真的明白你要做什么......但听起来你可能想要LIMIT操作符。看到这一点:

SQL - Select first 10 rows only?

因此,也许这样的事情?

SELECT 
    t.name, 
    m.top_marks 
FROM 
    table_name t, 
    (SELECT 
     marks 
    FROM table_name 
    ORDER BY marks DESC 
    LIMIT 3) m 
GROUP BY column_name DESC; 
0

可以与group_concat()/substring_index()方法做到这一点:

SELECT t.name, 
     substring_index(m.marks, ',', 1) as Mark1, 
     substring_index(substring_index(m.marks, ',', 2), ',', -1) as Mark2, 
     substring_index(substring_index(m.marks, ',', 3), ',', -1) as Mark3 
    m.top_marks 
FROM table_name t cross join 
    (SELECT group_concat(marks order by marks desc) as marks 
     FROM table_name 
    ) m 
GROUP BY column_name DESC; 

如果是足以具有它们在一列用逗号分隔的值:

SELECT t.name, substring_index(m.marks, ',', 3) as Marks3 
FROM table_name t cross join 
    (SELECT group_concat(marks order by marks desc) as marks 
     FROM table_name 
    ) m 
GROUP BY column_name DESC; 
相关问题