当前位置: 首页 > 面试题库 >

有效地包含不在SQL查询分组依据中的列

黎腾
2023-03-14
问题内容

给定

表A

Id   INTEGER
Name VARCHAR(50)

表B

Id   INTEGER
FkId INTEGER  ; Foreign key to Table A

我希望计算每个FkId值的出现次数:

SELECT FkId, COUNT(FkId) 
FROM B 
GROUP BY FkId

现在,我只想输出的名称Table A

这将不起作用:

SELECT FkId, COUNT(FkId), a.Name
FROM B b
INNER JOIN A a ON a.Id=b.FkId
GROUP BY FkId

因为a.Name不包含在GROUP BY子句中(产生is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause错误)。

关键是要像这样从输出中移出

FkId  Count
1      42
2      25

这样输出

FkId  Count  Name
1      42     Ronald
2      22     John

该错误消息在SO上有很多匹配项,但是某些匹配项

如何在查询输出中 有效地 包含联接的字段Table B(与的关系为1:1 FkId)?


问题答案:

您可以尝试如下操作:

   ;WITH GroupedData AS
   (
       SELECT FkId, COUNT(FkId) As FkCount
       FROM B 
       GROUP BY FkId
   ) 
   SELECT gd.*, a.Name
   FROM GroupedData gd
   INNER JOIN dbo.A ON gd.FkId = A.FkId

创建一个CTE(公用表表达式)来处理上的分组/计数Table B,然后将该结果(每行一行FkId)加入到最终结果集中,Table A并从中获取更多的列Table A



 类似资料:
  • 问题内容: 我在为MySQL编写SQL查询时遇到一些问题。我有一个具有以下结构的表: 我想创建一个查询,该查询从表中提取以下信息: 查询结果应如下所示: 当然,每个唯一的“ id”具有更多行。 我已经尝试过一些查询,例如 这将返回正确的结果,但是我必须使用“ pass”的其他可能值(最多7个)来扩展它 我尝试在AVG中使用嵌套的SELECT,但这没有用,因为我没有弄清楚如何正确地将其限制为当前的’

  • 问题内容: 我想找到一个SQL查询来查找其中field1不包含$ x的行。我怎样才能做到这一点? 问题答案: 这是什么领域?IN运算符不能与单个字段一起使用,而应与子查询或预定义列表一起使用: 如果要搜索字符串,请使用LIKE运算符(但这会很慢): 如果将其限制为要搜索的字符串必须以给定的字符串开头,则可以使用索引(如果该字段上有索引)并且速度相当快:

  • 问题内容: 考虑到与类似值的字符串列,什么是查询所有的最佳方法 ,其中包括给定数量的记录 (例如)? 我脑海中的解决方案是: 但由于前导,因此AFAIK该查询无法在列上使用索引。 必须有更好的东西。它是什么? 使用PostgreSQL,但 更希望 该解决方案也适用于其他DB。 问题答案: 在PostgreSQL 9.1中,您可以利用该模块并用它构建一个GIN索引。 您的表达式即使没有左锚也可以使用

  • 下面是我到目前为止所获得的查询,但是,我只需要得到最近5年的数据,这就得到了所有年份的数据。我尝试为sql语句添加top5,它似乎不起作用,它显示了一些错误。如何修改此查询以只获取最近5年的数据? 下面是我所期望的数据格式。 年度合计 552,074.78 2012-01-01 466,283.62 2011-01-01 640,813.37 2010-01-01 721,182.28 2009-

  • 问题内容: 我在尝试为此表定义SQL查询时遇到了麻烦: 有一张患者表格,其访问时记录的体重读数包括以下几列: 患者编号 体重读数 访问ID(每次访问一个) 换句话说,如果在两个记录中两个访问ID相同,则在相同的访问日期读取了两个权重。 我有这个查询来“让所有至少有两个体重读数高于150的患者”: 这是我的问题:如果我想修改此查询以便查询以下内容,该怎么办: “让所有患者在不同的访问中至少有两个体重

  • 我有一个Spring Boot应用程序。在其中,我有一个SQL查询,需要创建一个子查询,内部将该子查询的结果与另一个表连接,然后从该内连接的结果中进行选择。但是很明显,JPA不允许您在OF子句中使用子查询(我假设既不使用JPQL也不使用Criteria API)。有没有办法绕过这个? 我考虑过将子查询的结果存储在一个临时实体中(理想情况下不创建可持久化到DB的表),然后从存储在这些实体中的数据中进