2016-05-03 1 views
0

У меня есть 2 столаПолучение потока мудрым Высшие оценки в SQL

Таблица1. StudentMaster

 ROLL  CLASS NAME   TOTALMARKS STREAMID 
---------- ---------- ------------ ---------- ---------- 
12345   5 Rohit    75  100 
12346   7 Suman    95  101 
12347   5 Rajib    41  100 
12348   10 Rakesh    52  102 
12349   10 Himesh       101 
12350   7 Mizanur    85  103 
42145   5 Mohit       103 

Таблица2. Поток

STREAMID NAME   DURATION  FEES 
---------- ---------- ---------- ---------- 
    100 electrical   3  4500 
    102 civil    4  5400 
    103 mechanical   3  4500 
    101 ece     2  2500 

Теперь мне нужно получить информацию о студенте, который получает самые высокие оценки в каждом потоке.

В таблице Вывод должен выглядеть следующим образом:

Roll  Name  Stream   HighestMarks 
----  ------- ------   ------------ 
12345 Rohit  electrical  75 
12346 Suman  ece    95 
12348 Rakesh  civil    52 
12350 Mizanur mechanical  85 

Можете ли вы помочь мне с правильным запросом Oracle SQL для извлечения этого? Заранее спасибо.

+0

MySQL или Oracle? (Ответ, вероятно, будет специфичным для продукта.) – jarlh

+0

@jarlh oracle. Sql * Plus –

ответ

0

я, наконец, решить эту проблему с простым способом (я думаю)

select 
studentmaster.name,studentmaster.totalmarks highest_marks,stream.name stream 
from studentmaster,stream 
where studentmaster.streamid=stream.streamid 
and totalmarks in(select max(totalmarks) from studentmaster group by streamid); 
0

В MySQL вам нужен подвыбор с заказом по для выбора высших оценок

select a.ROLL as Roll, a.NAME as Name, b.NAME as Stream, a.TOTALMARKS HighestMarks 
from StudentMaster as a 
inner join Stream as b on b.STREAMID = a.STREAMID 
where a.rool in 
     (select rool from from StudentMaster 
      where (a.rool, STREAMID) in 
      (select max(ROLL), STREAMID from StudentMaster 
     group by STREAMID)) 
0

Вы можете использовать это:

SELECT * 
    FROM (SELECT ROW_NUMBER() OVER(PARTITION BY STREAMID ORDER BY TOTALMARKS desc NULLS LAST) AS RANK, 
       StudentMaster.name, 
       stream.name AS stream, 
       totalMarks AS HighestMarks 
      FROM StudentMaster INNER JOIN STREAM USING (streamId)) 
WHERE RANK = 1 

Он вычисляет для каждой строки из соединяемых таблиц, ранга ученика в потоке, упорядочивая по знаку; внешний запрос просто фильтрует, чтобы получить только учеников в первых местах каждого потока. упорядочение осуществляется в порядке убывания, и с NULL значениями в последней позиции