SQL выбрать заявление с группой по - PullRequest
2 голосов
/ 16 марта 2010

У меня есть данные в 2 таблицах, и я хочу создать отчет.

Таблица A:

  • tableAID (первичный ключ)
  • имя

Таблица B:

  • tableBID (первичный ключ)
  • оценка
  • tableAID (внешний ключ, ссылки на таблицу A)

В обеих таблицах есть гораздо больше, но они актуальныстолбцы.

Концептуально запрос, который я хочу выполнить:

select TableA.name, avg(TableB.grade) where TableB.tableAID = TableA.tableAID

Проблема, конечно, в том, что я использую функцию агрегирования (avg), и я могу переписатьэто так:

select avg(grade), tableAID from TableB group by tableAID

но тогда я получаю только идентификатор таблицы А, тогда как мне действительно нужен тот столбец имени, который появляется в таблице А, а не только идентификатор.

Возможно линаписать запрос, чтобы сделать это в одном операторе, или мне сначала нужно выполнить второй запрос, который я перечислил, получить список идентификаторов, а затем запросить каждую запись в таблице A для столбца имени ... мне кажется, я что-то упустилздесь очевидно, но я (вполне очевидно) не гуру sql ...

Ответы [ 3 ]

3 голосов
/ 16 марта 2010

Вы можете сделать это:

SELECT avg(b.grade), a.tableAID, a.name 
FROM TableA a 
     JOIN TableB b
       ON b.tableAID = a.tableAID
GROUP BY a.tableAID, a.name

Просто добавление его в группу будет работать нормально в вашем случае.

2 голосов
/ 16 марта 2010
 SELECT AVG(TableB.grade), TableB.tableAID, TableA.Name 
      FROM TableA INNER JOIN TableB
      ON TableA.TableAID = TableB.TableAID
      GROUP BY TableA.tableAID, TableA.Name
0 голосов
/ 18 марта 2010

Альтернативный ответ:

SELECT AVG(b.grade), a.tableAID, MAX(a.name )
FROM TableA a 
     JOIN TableB b
       ON b.tableAID = a.tableAID
GROUP BY a.tableAID

Просто чтобы ты подумал.

...