如何对每一行执行语句并返回整个结果

2023-12-30

这是上一个问题的延续:查找具有匹配行的组 https://stackoverflow.com/questions/42700771/find-groups-with-matching-rows

我有一张表,其中包含人和他们拥有的汽车

+-------+-------+
| Name  | Model |
+-------+-------+
| Bob   | Camry |
| Bob   | Civic |
| Bob   | Prius |
| John  | Camry |
| John  | Civic |
| John  | Prius |
| Kevin | Civic |
| Kevin | Focus |
| Mark  | Civic |
| Lisa  | Focus |
| Lisa  | Civic |
+-------+-------+

这个查询给了我所有拥有完全相同汽车的人Lisa以及丽莎本人,这很好。

;with cte as (
  select *
    , cnt = count(*) over (partition by name)
  from t
)
, matches as (
  select x2.name
  from cte as x 
    inner join cte as x2
       on x.model = x2.model
      and x.cnt   = x2.cnt 
      and x.name  = 'Lisa'
  group by x2.name, x.cnt
  having count(*) = x.cnt
)
select t.* 
from t
  inner join matches m
    on t.name = m.name

Result:

+-------+-------+
| name  | model |
+-------+-------+
| Lisa  | Civic |
| Lisa  | Focus |
| Kevin | Civic |
| Kevin | Focus |
+-------+-------+

如果我想找到所有拥有相同汽车的人Bob,我重新运行查询,结果应该给我John.

现在,我有一个 Java 名称列表,对于每个名称,我运行此查询。真的很慢。无论如何,是否可以在单个数据库调用中找到所有拥有相同汽车的人并将结果分组?

例如,使用第一个表。我可以运行一个查询来对名称进行分组。注意如何Mark已经消失了,因为他不拥有与其他人完全相同的汽车,而只是其中的一个子集。

+-------+-------+-------+
| Name  | Model | Group |
+-------+-------+-------+
| Bob   | Camry |     1 |
| Bob   | Civic |     1 |
| Bob   | Prius |     1 |
| John  | Camry |     1 |
| John  | Civic |     1 |
| John  | Prius |     1 |
| Kevin | Civic |     2 |
| Kevin | Focus |     2 |
| Lisa  | Focus |     2 |
| Lisa  | Civic |     2 |
+-------+-------+-------+

这个结果集也很好,我只需要知道谁属于哪个组,我可以稍后取他们的车。

+-------+-------+
| Name  | Group |
+-------+-------+
| Bob   |     1 |
| John  |     1 |
| Kevin |     2 |
| Lisa  |     2 |
+-------+-------+

我需要以某种方式遍历姓名列表并找到拥有相同汽车的所有人,然后将其全部合并到一个结果集中。


您可以通过两种方式执行此操作。一种方法是进行复杂的连接。另一条路是捷径。只需将汽车聚合成一个字符串并比较这些字符串即可。

with nc as (
      select n.name,
             stuff( (select ',' + t.model
                     from t
                     where t.name = n.name
                     order by t.model
                     for xml path ('')
                    ), 1, 1, '') as cars
      from (select distinct name from t) n
     )
select nc.name, nc.cars, dense_rank() over (order by nc.cars)
from nc
order by nc.cars;

这将创建一个列表,其中包含名称和汽车列表(以逗号分隔列表形式)。如果您愿意,可以连接回原始表以获取原始行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对每一行执行语句并返回整个结果 的相关文章

  • 独立对列进行排序,使得所有空值都位于每列的最后

    这是一个名为的示例表animal name color fox brown fox red dog gold 现在 我想要的是这样的结果 fox dog brown gold red 名称应该是结果的列 不同颜色值作为行 我的第一个想法是
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 如何在 PostgreSQL 中使用具有多个值的 SQL LIKE 条件?

    有没有更短的方法来查找多个匹配项 SELECT from table WHERE column LIKE AAA OR column LIKE BBB OR column LIKE CCC 这个问题适用于 PostgreSQL 9 1 但如
  • 有没有办法以编程方式轻松更改多个 SSIS 包上的服务器名称?

    作为发布周期的一部分 我们正在创建多个 SSIS 包来迁移大型数据库 我们最终可能会得到大约 5 10 个 SSIS 包 由于我们有 4 个环境 开发 QA 登台 生产等 是否有一种有效的方法可以在每个 SSIS 包经历不同的服务器环境时更
  • 了解 SSMS 2008 中关系的更新和删除规则

    当我们定义外键约束时 我对 SQL Server 2008 Management Studio 中的更新和删除规则的含义感到困惑 我也没有找到相关的帮助文档 例如F1帮助 这是屏幕快照 如果有人能描述它们的含义并推荐一些相关文档来阅读 我将
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • 跨多个表进行搜索,并在结果行中显示表名称

    如何构建 SQL 语句以跨多个平面不相关的表运行 并使用选择结果和结果来自的表的名称显示结果 这种情况是这样的 我有几个表 每个表都有相同的列名 这是我从外部各方收到的数据 并将其存储在不同的表中 相同的表看起来像 Table 1 pid
  • 如何在 SQL Server 存储过程中对用户定义的表类型执行 ForEach?

    XX PROCEDURE dbo XXX X dbo IntType readonly AS BEGIN SET NOCOUNT ON how can I foreach X here and do process individually
  • 更改表分布(Azure 数据仓库)

    在急着下班的过程中 我在一个采用循环分配的新桌子上运行了一个大型插入 我知道这不太可能 但是有没有办法将表的分布从循环更改为哈希分布 很遗憾ALTER TABLE不支持更改 Azure SQL 数据仓库中表的分布 您可以做的下一个最好的事情
  • 计算运行总计时出错(之前期间的累计)

    我有一张桌子 我们称之为My Table有一个Created日期时间列 在 SQL Server 中 我试图提取一个报告 该报告显示历史上有多少行My Table按月在特定时间 现在我知道我可以显示有多少added每个月 SELECT YE
  • 临时表是线程安全的吗?

    我正在使用 SQL Server 2000 它的许多存储过程广泛使用临时表 数据库的流量很大 我担心创建和删除临时表的线程安全性 假设我有一个存储过程 它创建了一些临时表 它甚至可以将临时表连接到其他临时表等 并且还可以说两个用户同时执行存
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • SQL Server 2014 安装中缺少 SQL Server Integration Services

    我正在尝试使用 Integration Services 安装 SQL Server 2014 Here https www microsoft com en US download details aspx id 42299是我以前用工具
  • 如何使用 LAMBDA 表达式在 LINQ 中执行 IN 或 CONTAINS?

    我有以下 Transact Sql 我正在尝试将其转换为 LINQ 并且很挣扎 SELECT FROM Project WHERE Project ProjectId IN SELECT ProjectId FROM ProjectMemb
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • 可以获取SQL Server中当前执行的存储过程的行号吗?

    几年前 我在 Sybase Delphi 环境中工作 使用 BDE 连接到数据库服务器 我们有一个 Delphi 小应用程序 给定当前正在执行的存储过程的名称 它可以告诉您当前正在执行该存储过程的哪一行 这对于调试似乎挂起的存储过程非常有用
  • SQL Server 上的语法错误

    这可能是一个愚蠢的语法错误 但我只是继续阅读我的程序 但我无法弄清楚我的错误在哪里 消息 156 第 15 级 状态 1 第 41 行关键字附近的语法不正确 为了 这是我的代码 alter procedure LockReservation
  • 使用 postgres 和 node js 在单个语句中执行多个查询

    我需要在像这样的单个语句中执行插入和删除查询 INSERT INTO COMPANY ID NAME VALUES 1 Paul DELETE FROM COMPANY WHERE ID 12 这是我用于执行查询的 node js 代码 p
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • VB6+SQL-Server:如何使用 ADODB.Command 执行带有命名参数的查询?

    我一直在尝试使用 ADODB Command 执行参数化查询 我知道我可以使用 对于参数 但我的查询相当大 我真的不想跟踪参数的确切顺序 我尝试了类似以下的操作 objCmd CommandType adCmdText objCmd Com

随机推荐

  • 当值可以是对象或空数组时反序列化 JSON

    我正在使用 VK API 有时服务器可以返回空数组而不是对象 例如 personal when it is empty or personal religion smoking 1 alcohol 4 when not empty 我正在使
  • 如何在 Swift 中的 UI 选项卡栏上应用渐变?

    我通过故事板构建了选项卡栏 并自定义颜色 我在应用程序委托中更改它 使用UITabBar appearance barTintColor Color 我有一个梯度方法是这样的 func setGradientBackground color
  • Gerrit - Gitlab 集成

    为了改进开发流程 我们组织决定在开发工作流程中引入 Gerrit 我是负责实施 Gerrit 服务器的人 互联网上提供的用户指南对于将 Gerrit 实施到我们现有的工作流程非常有帮助 我们使用 Jenkins 和 Sonar 作为非交互式
  • 具有客户端证书身份验证的.Net Core Web API

    我在 Net Core 2 1中开发了一个简单的WEB API服务 我正在尝试实现客户端证书身份验证 因此我只能向在其计算机上安装了特定证书的客户端授予对 API 的访问权限 客户端使用浏览器 Chrome Edge IE11 或 Fire
  • 从n中选择k

    我想选择k元素均匀地随机地从可能的n无需两次选择相同的数字 对此有两种简单的方法 列出所有内容n的可能性 随机播放它们 你不需要 洗牌所有n数字只是k其中通过执行第一个k费希尔 耶茨 Fisher Yates 的脚步 选择第一个k 这种方法
  • Mockito java.lang.Exception:当我在测试中使用内部类时,类应该是公共的

    我有以下测试 RunWith Enclosed class public class ProductTest RunWith MockitoJUnitRunner class Ignore public static abstract cl
  • 避免代码重复的最佳方法是定义比较运算符“<、<=、>、>=、==、!=”,但要考虑 NaN?

    我数学 x lt y相当于 x gt y 对于浮点运算来说也是如此 在多数情况下 但不总是 什么时候x or y是 NaN x lt y is not相当于 x gt y 因为比较NaN任何事物总会有回报false 但仍然 x lt y l
  • 动态修补(处理创建时传递的变量)有哪些替代方案?

    我听说有人将动态修补描述为一种黑客行为 或者在 Pd 的未来版本中存在破坏的风险 这是足够合理的 但这似乎意味着在构建抽象时还有其他选择 动态修补似乎对于实例化可变数量的对象和连接到可变数量的入口和出口 在创建时定义的数字 我个人不需要在事
  • 在自定义 Cocoapods 中使用故事板和图像资源

    我正在尝试使用 cocoa pod 模块化一个大型 iOS 项目 正在 Swift 中开发 这个想法是创建 子应用程序 其中包含可以集成到主项目中的故事板和资产 在这种情况下 我在使用故事板时遇到了麻烦 这个问题类似于 我认为 https
  • Mojarra Java EE 5/6 兼容性

    非常简单的问题 是否有人有关于 Mojarra JSF RI 与 Java EE 5 和 6 标准兼容性的 官方 信息的链接 我似乎找不到任何与此有关的信息 我们被 Java EE 5 应用程序服务器困住了 我们想知道可以使用哪个版本的 M
  • 从 Python 中使用 jar 运行 Java 程序

    我正在尝试使用 Python 中的 jar 运行 java 文件 我首先运行命令 java classpath Users blablalba jackson all 1 9 0 jar parseJason 它工作得很好 然后我编写了一个
  • 当我更改一行的值时,连续形式的 MS Access 组合框会更改所有行的值

    过去两个小时我一直在尝试解决这个问题 但没有成功 所以我希望你能帮助我解决这个问题 我有一个连续的表单 一次显示多行 我在表单中添加了一个组合框 显示一些可以从另一个表中选择的值 同时显示同一个表中的默认值 问题是 一旦我更改表单中一个组合
  • 如何使用 Erlang file:read_file_info 权限/模式信息?

    Erlang 文档为file read file info 1声明 文件权限是总和 和 其他位 可以设置 而不是灌输信心 而且 谷歌一直不是我的朋友 我希望采用返回的模式file read file info 1 e g 33188 在 L
  • 比较受歧视的工会

    我是 F 的新手 正在尝试 FParsec 我会使用 FParsec 生成 AST 我想使用 FsUnit 围绕解析器的各个部分编写一些测试 以确保正确运行 我在语法上遇到了一些麻烦 抱歉 确切的代码正在工作 我可以稍后发布一个具体的示例
  • 无法反序列化当前 JSON 对象(空数组)

    我正在尝试制作一个将所有这些对象格式化为树视图的程序 为此 我使用 JSON 来排序对象 我需要解析 JSON 所以我选择了 JSON NET 下面是一个格式化示例 Space ClassName SpaceObject Name Spac
  • 所有指针都保证能正确地往返 void * 吗?

    在C语言中 是否保证任何指针类型都可以往返void 成功地 也就是说 像下面这样的东西保证可以工作 typedef struct A A p void v p A p2 v use p2 here 无论什么类型A 对象指针确实可以通过voi
  • NUnit Assert.Equals 与 Assert.AreEqual

    有什么区别 Assert Equals and Assert AreEqual Assert NotNull and Assert IsNotNull Assert Equals 是对象比较 Assert AreEquals 被重载以比较
  • 在 Node 模块导出的函数上使用 `jest.spyOn`

    In Jest https jestjs io 为了监视 并可选择模拟实现 方法 我们执行以下操作 const childProcess require child process const spySpawnSync jest spyOn
  • 使用 .NET 获得快速 RPC 的最简单方法?

    在 NET 中获取 RPC 最简单的方法是什么 我看到有 NET Remoting和WCF 根据维基百科 WCF是 NET Remoting的后继者 到目前为止 我只尝试了远程处理的东西 这似乎非常简单 到目前为止 我也没有遇到任何应用程序
  • 如何对每一行执行语句并返回整个结果

    这是上一个问题的延续 查找具有匹配行的组 https stackoverflow com questions 42700771 find groups with matching rows 我有一张表 其中包含人和他们拥有的汽车 Name