带有group by的sql select语句

带有group by的sql select语句,sql,select,group-by,Sql,Select,Group By,我有两个表中的数据,我想创建一个报告 表A: tableAID(主键) 名字 表B: tableBID(主键) 等级 tableAID(外键,参考表A) 这两个表都有更多内容,但这些都是相关的列 从概念上讲,我要运行的查询是: select TableA.name, avg(TableB.grade) where TableB.tableAID = TableA.tableAID 当然,问题是我使用的是聚合函数(avg),我可以这样重写它: select avg(grade), tab

我有两个表中的数据,我想创建一个报告

表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专家…

您可以这样做:

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
仅将其添加到组中就可以了。

备选答案:

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

只是想让你思考一下。

+1表示响应速度-是发布后的15秒还是20秒!是的,不知怎的,他在预先计算答案。或者可能只是一个非常好的缓存算法。@amelvin,@Larry-我承认,我是一个机器人:(“…在你的情况下会很好。”我可以假设我可以在“分组方式”中添加更多列吗从我可能也需要的表A中,没有任何性能问题?@user85116-这是正确的,优化器会很好地处理这个问题,只需添加您需要的任何列。如果您确实遇到某种性能下降,那么在查询/表设置中发布另一个问题,您将获得特定的优化优化/索引技巧…社区中有很多SQL优化专家。