这是我在表格中的示例数据:
| name | type |
+-------+------+
| j | 1 |
| j | 2 |
| k | 1 |
| k | 1 |
| k | 1 |
我想选择姓名全部为1的名字。
j有两个元组,但type = 1元组只有一个。
k有三个元组,type = 1元组是三元组。
因此结果是k
我尽可能地尽可能地思考,但我现在就放弃了:(
有人能给我一些提示吗?
谢谢!
答案 0 :(得分:3)
假设您只想要不同的名称,而不是所有相关记录
Select name
From YourTable
Group By Name
Having min(type)=1 and max(type)=1
答案 1 :(得分:2)
如果我理解正确,您要排除所有NAME,其中TYPE在整个表的任何行中可能不等于1。它可以通过以下查询来完成:
select *
from your_table as t1
where not exists
( select 1
from your_table as t2
where t2.type <> 1
and t1.name = t2.name)
答案 2 :(得分:1)
按名称统计元组。伯爵是一个集合。在组中由您放置非聚合列 - 名称。这是按降序排序的,DESC。我们只选择最上面的一行,因此我们从最大到最小的排序是最大的“元组”。
SQL Server中的示例代码:
DECLARE @temp TABLE (name char(1), type tinyint)
INSERT INTO @temp VALUES ('j', 1), ('j', 2), ('k', 1), ('k', 1), ('k',1)
SELECT TOP 1
name
,COUNT(name) AS [Tuples]
FROM @temp
WHERE type = 1
GROUP BY name
ORDER BY Tuples DESC