带有group by的sql select语句

时间:2010-03-16 18:12:34

标签: sql select group-by

我有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

但是我只得到TableA的ID,而我真的需要TableA中出现的名称列,而不仅仅是ID。

是否可以在一个语句中编写查询来执行此操作,或者我是否首先需要执行我列出的第二个查询,获取id的列表,然后在TableA中查询名称列中的每个记录...似乎对我来说,我在这里遗漏了一些明显的东西,但我(很明显)不是一个sql大师...

3 个答案:

答案 0 :(得分:3)

你可以这样做:

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

只需将其添加到群组中就可以正常使用。

答案 1 :(得分:2)

 SELECT AVG(TableB.grade), TableB.tableAID, TableA.Name 
      FROM TableA INNER JOIN TableB
      ON TableA.TableAID = TableB.TableAID
      GROUP BY TableA.tableAID, TableA.Name

答案 2 :(得分:0)

替代答案:

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

只是为了让你思考。