我有一张桌子,里面有人和他们拥有的汽车
+-------+-------+
| 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
以及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
结果:
+-------+-------+
| 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;
这将创建一个列表,其中包含名称和汽车列表,以逗号分隔列表。如果愿意,可以加入原始表以获取原始行。
问题内容: 通过将用户的IP,失败的尝试次数和最后的尝试时间记录到名为的MySQL数据库表中,我有一种简单的登录系统保护机制。但是,当我尝试使用以下代码在数据库中插入新条目时,execute()函数将返回false并无法执行。 代码如下: 我是php和MySQL的新手,通过研究,我发现SQL语法显然需要在查询的VALUE部分的字段周围加上引号,例如: 但是我在这里发现它实际上使查询停止工作(仍然尝
我有一个LegacyAcCountDto,我需要从两个不同的来源建立一个列表。一个是本地JPA存储库,另一个是Web服务调用。Web服务版本具有JPA数据源不可用的帐户状态。我需要并行执行两个调用,当它们都完成时,我需要找到Web服务列表的legacyId,并用从Web服务中提取的帐户状态填充列表。整个想法是返回一个包含完整DTO的列表。我不需要把它保存回网络服务或JPA回购 DTO: merge
问题内容: 我正在我的VirtualBoxed Ubuntu 11.4上测试此Go代码 Ubuntu可以访问我所有的4个内核。我通过同时运行几个可执行文件和系统监视器来检查这一点。但是,当我尝试运行此代码时,它仅使用一个内核,并且没有从并行处理中获得任何收益。 我做错了什么? 问题答案: 您可能需要查看Go FAQ 的Concurrency部分,特别是以下两个问题,并确定哪个(如果不是两个)适用于
最近,我们正在为我们的应用程序解决一个性能问题,该代码最初是基于Corda教程代码的M13版本构建的,我们遵循了Corda的版本,现在更新为V2.0。业务很简单,甲方以表单的形式上传一份包含一些元数据的合同文档,然后将此事务发送给乙方,我们在验证功能中定义了一些简单的条件,因此,通常事务将在没有任何手动操作的情况下完成。但如果我们在本地环境中这样做,这个过程大约需要3秒钟(一个2.9M附件),但当
当我使用预准备语句异步执行多个语句时,我得到带有损坏数据的JSON。键和值完全损坏了。 首先,当我使用自定义脚本对我们的项目执行压力测试时,我遇到了这个问题。我们使用DataStax C驱动程序并执行来自不同光纤的语句。 然后,我试图隔离这个问题,并编写了一个简单的C#程序,它在一个循环中启动多个Task。每个任务都使用一次创建的prepared语句从基中读取数据。对于某些行,结果完全混乱,例如:
问题内容: 说我想做,如何在同一个mysql_query()中做它们? 编辑: 由于这个问题有很多看法,我想指出,自PHP 5.5起,其他功能现在已被弃用,不应使用。 问题答案: 我从来没有尝试过,但是我认为您可以使用mysqli :: multi_query 。拒绝多条语句的好处之一是,它可以立即排除一些更常见的SQL注入攻击,例如添加一条语句。因此,您可能需要注意多个语句。