2015-12-30 4 views
0

У меня есть 2 таблицы:наиболее эффективный SQL-запрос

T1 { 
    id: string; 
    school: string 
} 

и

T2 { 
    school_id: string; 
    student_id: string; 
    tuition_fee: double 
} 

В 2 таблицы связаны по T1.id и T2.school_id. T1 содержит информацию о каждой школе. Это относительно мало. T2 содержит информацию о стоимости обучения для каждого учащегося. Это может быть огромным (миллионы записей).

Edit:

Теперь я хочу, чтобы выяснить, какие 3 школы собирают большинство платы за обучение от своих студентов. Предположим, что невозможно, чтобы 2 школы взимали одинаковое количество всех сборов за обучение со всех своих учеников. И мое решение таково:

  1. Групповые записи в T2 от school_id;
  2. Рассчитать сумму tuition_fee в каждой группе;
  3. Сортировка групп по сумме в порядке убывания;
  4. Получить верхние 3.

Мои вопросы:

  1. Любой лучший способ сделать это?
  2. Что является самым эффективным SQL для этого?
  3. Любые другие соображения, которые необходимо учитывать для повышения скорости? например с помощью индексации, вид и т.д.
+0

Ваш метод в порядке. Все это должно выполняться в одном запросе. –

+0

@ GordonLinoff, моя интуиция подсказывает мне, что сортировка на шаге 3 может не понадобиться ... – james

+0

Уверены, что у вас действительно есть вопрос? Там могут быть связи за плату за обучение. Даже более трех школ для высшего обучения. Что ты тогда должен вернуть? – philipxy

ответ

2

Если вы хотите только school_id и сумма платы за один вариант:

SELECT TOP 3 
    SUM(tuition_fee) AS TOTAL_TUITION_FEE, 
    school_id 
FROM T2 
GROUP BY school_id 
ORDER BY TOTAL_TUITION_FEE DESC 

Если you're с использованием сервера SQL вы можете использовать анализатор запросов (some info, где это можно найти), чтобы увидеть, как улучшить производительность, предлагая указатель или другие советы.

Не похоже, что это довольно тяжелый запрос.

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