2015-04-22 7 views
2

У меня есть две таблицы SQL.SQL: как выбрать что-то, используя информацию из другой таблицы

В первой таблице, каждая строка (среди других полей, которые не имеют отношения к вопросу) в score и category_id полевых

Вторая таблица (categories) представляет собой таблицу со списком всех возможных категорий, к которой элемент в первой таблице может принадлежать.

Я хотел бы сделать следующий SQL запрос:

SELECT category_name, (???) AS category_score 
FROM categories 
ORDER BY category_score DESC 

где ??? = the sum of the scores of all the elements in table 1 that belong to the category.

ответ

3

Вы можете join и group by:

SELECT category_name, SUM(score) AS category_score 
FROM  categories c 
JOIN  element e ON c.category_id = e.category_id 
GROUP BY category_name 
ORDER BY 2 DESC 
+0

Спасибо за ответ, я не знаю, о 'группе by', я буду смотреть на него. Просто быстрый вопрос, хотя, я не получаю 'ORDER BY 2 DESC' часть? Почему это не «GROUP BY category_score DESC», например? –

+0

@Malimalo Предложение 'group by' разбивает результат на группы, так что агрегированные функции (например,' sum') могут применяться к каждому уникальному значению 'category_name' независимо. Как только это будет сделано, результат все равно необходимо отсортировать, что делается с помощью инструкции 'order by'. – Mureinik

+0

Спасибо за ваш ответ, это был фактически '2' в' порядке', который я не получил. Но я сделал то, что должен был сделать, прежде чем спрашивать, погубил его и получил свой ответ (что это означало «порядок по второму элементу линии выбора») очень быстро. Спасибо за помощь ;) –

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