2015-09-18 4 views
0

У меня есть две таблицы:SQL заселение таблицу с расчетом из других таблиц

grades_table = имеет 100 строк студентов с оценками т.е.

 Student  Mark 
      Joe   64 
      Mark   50 

percentage_table = таблица, которая имеет определенный процент от сорта, т.е.

  Grade   Mark 
      A   70+ 
      B   60+ 
      C   50+ 

Возможно ли, чтобы в SQL была заполнена новая таблица, называемая В целом, с оценкой оценки? Например,

 Student   Grade 
     Joe    B 
     Mark   C 

Я посмотрел IN и МЕЖДУ. Но я не могу понять, как рассчитать диапазоны. Я новичок в SQL, и любая помощь или указание в правильном направлении было бы здорово.

+4

Разделите столбец столбца split_table на две колонки, markmin и markmax. – jarlh

+0

Обычно вы не должны создавать * таблицу * для этого вычисления - обычно вам нужен либо набор результатов (для одного специального запроса), либо * вид *. Суть в том, что не * хранить * данные, которые могут быть рассчитаны. Как только вы храните рассчитанные данные, вы вводите возможность того, что вычисленные данные не синхронизируются с базовыми данными. –

+0

, даже если можно использовать один столбец, я бы предложил вам использовать два столбца, он чище и не похож на «хак» – fthiella

ответ

2

Столбец с разделительной таблицей в двух колонках, markmin и markmax. Тогда JOIN таблицы как:

select g.student, p.grade 
from grades g 
    join percentage p ON g.mark between p.markmin and p.markmax 

Или, по позже предложил Если бы я изменил сценарий чуть-чуть, и только один столбец метки в percentage_table, поэтому только 60+, 70+:

Здесь я предполагаю, что (A, 70) означает 70 и выше - класс A. Сделайте GROUP BY с MIN найти «низкий» класс по алфавиту:

select g.student, min(p.grade) 
from grades g 
    join percentage p ON g.mark <= p.mark 
group by g.student 

В качестве альтернативы, использовать коррелированных суб-выбора:

select g.student, (select min(p.grade) from percentage p 
        where g.mark <= p.mark) 
from grades g 
+0

Прохладный! Если я немного изменил сценарий и имел только один столбец с отметкой в ​​процентах, то только 60+, 70+ и т. Д., Как мне изменить этот ответ? – user47467

+0

Можете ли вы изменить свой вопрос? – jarlh

+0

отредактировано Одиночные метки – user47467

0

Я хотел бы предложить вам два разных столбцов в таблице percentage_table:

Grade | MarkMin | MarkMax 
A  | 70  | Null 
B  | 60  | 69 
C  | 50  | 59 

Тогда вы можете просто использовать JOIN:

SELECT g.student, p.Mark 
FROM 
    grades_table AS g LEFT JOIN percentage_table AS p 
    ON (g.Mark >= p.MarkMin OR p.MarkMin IS NULL) 
    AND (g.Mark<=p.MarkMax OR p.MarkMax IS NULL) 

70+, что означает> = 70, может быть вставлено как (70, Null). Если вы хотите, чтобы у вас < = 49, вы можете добавить оценку как (Null, 49).

Смежные вопросы