2015-10-05 4 views
0

В настоящий момент я занят двумя столами, Студенты и Классы. Эти два содержат столбец project_group, способ классифицировать нескольких студентов из одного класса на более мелкие группы.Выбор после группового соединения при использовании соединения

В студентах таблицы есть столбец город, что государства, в котором студенты города/городов живут, из строк, которые были заполнены уже есть несколько городов, встречающихся несколько раз. Код, который я использовал, чтобы проверить, сколько раз город в настоящее время показал это:

SELECT City, count(*) 
FROM Students 
GROUP BY City 

Теперь следующая вещь, которую я хочу сделать, это показать в классе, в котором города студенты живут и сколько там живут, так что для например, результат:

  • A | - | 2
  • A | Нью-Йорк | 3
  • A | Лос-Анджелес | 1
  • B | - | 1
  • B | Майами | 2
  • B | Сиэтл | 1

Студенты и Классы могут присоединиться к друг другу на колонке project_group но то, что я в основном заинтересованы в его использовании как GROUP BY упоминалось ранее, используя РЕГИСТРИРУЙТЕСЬ, а также показывая результаты в классе.

Спасибо заранее, Krad

+2

Какую базу данных вы используете? –

+0

Не могли бы вы привести пример столбцов, содержащихся в двух таблицах? В частности, что именно вы хотите присоединиться к двум таблицам? Это поможет мне написать запрос, чтобы дать вам представление о том, что вам нужно сделать. – Zi0n1

+0

@HART CO Я использую SQL Developer. – KRAD

ответ

0

Я не уверен, что имя столбца для A и B в вашем примере. Я предполагаю Classes.Class в следующем:

SELECT 
    C.Class 
    , S.City 
    , COUNT(S.*) AS Count 
FROM 
    Classes AS C INNER JOIN 
    Students AS S ON C.Project_Group = S.Project_Group 
GROUP BY 
    C.Class 
    , S.City 
+0

По какой-то причине это не работает. Я получаю ошибку «SQL command not correct finished»-error. Возможно, это связано с тем, что ** project_group ** написано несколько иначе между таблицами? В ** Студенты ** это ** project_groep **, тогда как в ** Классах ** это ** project_group **. Я не уверен, почему имена не совпадают, и использование одинакового правописания лучше по понятным причинам, но может ли это быть причиной? Не должны ли имена быть одинаковыми для внутреннего соединения? – KRAD

+0

Нет, имена не обязательно должны совпадать, но вам нужно указать имена правильно в разделе «ON» соединения. Вы заметите, что «ON» использует псевдонимы, назначенные для каждой таблицы (C или S), поэтому вам нужно будет сменить S.Project_Group на S.Project_groep –

0

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

SELECT class_id, city, count(*) AS amount 
FROM students, classes 
WHERE students.project_group = classes.project_group 
GROUP BY class_id, city 
ORDER BY class_id 
+1

Взгляните на ответ, предоставленный вчерашним белым, это верно. Следует отметить, что вы используете устаревший синтаксис, список исключений, разделенных запятыми, в 'FROM' следует избегать, ответ снежного белого использует синтаксис соединения, совместимый со стандартами, поэтому я бы предложил принять этот ответ. –

+0

@HartCO 'ВЫБРАТЬ class_id, город, COUNT (*) AS суммы ОТ студентов РЕГИСТРИРУЙТЕСЬ классов ON (students.project_group = classes.project_group) GROUP BY class_id, город ORDER BY class_id' бы быть лучшей версией тогда ? – KRAD

+0

Да, не нужно для '()' вокруг условия соединения, но не повредит вообще, 'JOIN ... ON' является стандартным синтаксисом сейчас, он также помогает избежать некоторых уродливых ситуаций и путаться' WHERE' когда участвуют больше таблиц. –