SQL - как обслуживать значение «AS» для аргумента

0

Итак, у меня есть две таблицы;

course, что есть столбцы id, description, units, и price_per_unit.

student, который имеет столбцы id, name, и course_id.

Я хочу SELECT студента с самой высокой суммой платы за обучение (единицы * price_per_unit)

Я попробовал это SELECT STATEMENT;

SELECT student.name, 
       course.description, 
       course.units * course.price_per_unit AS "total_tuition_fee" 
FROM student 
LEFT JOIN course 
ON course.total_tuition_fee = (SELECT MAX(course.total_tuition_fee) FROM course);

Но это не сработало, я использовал AS для своего course.units * course.price_per_unit и назвал его total_tuition_fee но я не могу поместить его в свой аргумент ON.

  • 1
    Таблица курса содержит поле total_tuition_fee ?
  • 0
    Нет, есть только units и price_per_unit . Я хочу, чтобы иметь возможность узнать наибольшую сумму, не имея еще один столбец. @DhavalAsodariya
Показать ещё 1 комментарий
Теги:

1 ответ

3
Лучший ответ

Ваш запрос немного испорчен. Сначала вам нужно согласовать право на участие, а затем заказывать сборы за обучение по убыванию.

SELECT student.name, 
   course.description, 
   course.units * course.price_per_unit AS "total_tuition_fee" 
FROM student 
INNER JOIN course 
  ON course.id = student.course_id
ORDER BY (course.units * course.price_per_unit) DESC
LIMIT 1;

Это позволит выбрать комбинацию студенческого курса с самой высокой суммой платы за обучение. LIMIT 1 выбирает первую запись в таблице, которая сортируется по продуктам единиц и цене за единицу.

Примечание. Это может быть медленнее, чем обычно, поскольку расчет выполняется дважды. Таким образом, вы можете создать подзаголовок со всеми тарифами, а затем выбрать тот, который имеет наибольшую плату:

SELECT x.student_name, x.course_description, x.total_tuition_fee 
FROM
(SELECT student.name AS student_name, 
   course.description AS course_description, 
   course.units * course.price_per_unit AS "total_tuition_fee" 
FROM student 
INNER JOIN course 
  ON course.id = student.course_id) x
ORDER BY x.total_tuition_fee DESC
LIMIT 1;
  • 0
    Я думал об этой «альтернативе», а также думал, что это плохая практика, но, может быть, это вообще не альтернатива, так как это будет единственный путь? XD
  • 1
    Если вы ссылаетесь на расчет, выполненный дважды, смотрите мое обновление.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню