Mysql 无计数功能的计数记录
人表:Mysql 无计数功能的计数记录,mysql,sql,Mysql,Sql,人表: ID Name 1 Peter 2 Peter 3 Peter 4 Tom 5 Tom 6 Mary 7 Paul 如果我想选择一个名称,该名称在human表中包含3次或更多次,我可以这样编写查询: Select name, count(name) From Human Group By name Having count(name) >= 3 但是我现在需要编写一个查询,而不需要使用and count函数。那么,如何实现这个查询呢 WITH ct
ID Name
1 Peter
2 Peter
3 Peter
4 Tom
5 Tom
6 Mary
7 Paul
如果我想选择一个名称,该名称在human表中包含3次或更多次,我可以这样编写查询:
Select name, count(name)
From Human
Group By name
Having count(name) >= 3
但是我现在需要编写一个查询,而不需要使用and count函数。那么,如何实现这个查询呢
WITH cte
AS (
SELECT NAME
,SUM(1) AS NameCount
FROM Human
GROUP BY NAME
)
SELECT *
FROM cte
WHERE NameCount >= 3
或
无
分组依据
,无拥有
,无计数
-但有一个双重自我加入
。这没什么意义,但很有效
select distinct t1.name
from tablename t1
join tablename t2 on t1.name = t2.name and t1.id <> t2.id
join tablename t3 on t1.name = t3.name and t1.id <> t3.id and t2.id <> t3.id
选择distinct t1.name
来自表名t1
将tablename t2连接到t1.name=t2.name和t1.id t2.id
将tablename t3连接到t1.name=t3.name和t1.id t3.id和t2.id t3.id
顺便说一句,告诉你的老师你在网上找到了这个解决方案
此处演示:
您被禁止使用的用例/任务是什么?
COUNT()
?我不理解您的意思。你的意思是为什么我不使用计数函数?是的,我的意思是。呃……我的老师给了我一个额外的挑战,让我在没有或计数函数的情况下实现查询。好吧,如果这是一个额外的挑战,为什么不简单地告诉他们你无法解决这个问题(也许需要一个提示)。在这里寻求解决方案有什么好处?MySQL不支持CTE,据我所知,这仍在计算中。对不起,我以为这与Sql Server有关。我从来没有想到过这个解决方案+1哈哈哈,当然我会从互联网上告诉我的老师答案。非常感谢。
select distinct t1.name
from tablename t1
join tablename t2 on t1.name = t2.name and t1.id <> t2.id
join tablename t3 on t1.name = t3.name and t1.id <> t3.id and t2.id <> t3.id