编写一个 SQL 查询,查找所有至少连续出现三次的数字。
时间: 2024-03-12 10:47:59 浏览: 24
以下是可以用于 PostgreSQL 的 SQL 查询,可以找到至少连续出现三次的数字:
```
SELECT DISTINCT a.num
FROM (
SELECT num,
num - ROW_NUMBER() OVER (ORDER BY num) AS grp
FROM your_table
) a
JOIN (
SELECT grp,
COUNT(*) AS cnt
FROM (
SELECT num,
num - ROW_NUMBER() OVER (ORDER BY num) AS grp
FROM your_table
) t
GROUP BY grp
) b ON a.grp = b.grp
WHERE b.cnt >= 3;
```
请将 `your_table` 替换为你的表名,将 `num` 替换为你要找的数字列名。这个查询使用了子查询和窗口函数,首先将数字列分组成连续出现的组,然后计算每个组中的数字数量,并与至少有三个数字的组进行匹配。最终结果是所有至少连续出现三次的数字的列表。
相关问题
编写一个 SQL 查询,查找所有至少连续出现三次的数字。 返回的结果表中的数据可以按 任意顺序 排列。
可以使用MySQL中的变量来实现此查询。下面是一个可能的实现:
```
SELECT DISTINCT t1.num
FROM (
SELECT
num,
@count := IF(@prev = num, @count + 1, 1) AS count,
@prev := num
FROM
table_name,
(SELECT @count := 0, @prev := null) AS vars
ORDER BY num
) AS t1
WHERE t1.count >= 3;
```
该查询中,我们使用了MySQL中的变量@count和@prev,以及一个子查询用于初始化这些变量。查询的主要部分使用了一个子查询,首先将表按num列进行排序,然后使用@prev变量来记录上一个出现的数字,使用@count变量来记录当前数字连续出现的次数。如果当前数字和上一个数字相同,则将@count加1;否则将@count重置为1。在最外层查询中,我们筛选出@count大于等于3的数字,并使用DISTINCT关键字去重。
编写一个SQL查询,查找 Person表中所有重复的电子邮箱。
好的,以下是查询语句:
```
SELECT email, COUNT(*) AS count FROM Person GROUP BY email HAVING count > 1;
```
这条SQL语句会查找Person表中所有重复的电子邮箱,并返回这些重复邮箱以及出现的次数。其中,GROUP BY语句会按照email列进行分组,COUNT(*)函数会对每个分组中的记录数进行统计,HAVING语句会筛选出出现次数大于1的分组,即重复的电子邮箱。