首页 > 解决方案 > 一个变量在表中重复多少次?

问题描述

我试图弄清楚如何创建一个查询以在一个值更改之前连续提取多少次重复。我的目标是计算“是”列在达到“否”之前重复的次数。我想要“是”的最大重复次数。

例如,如果我有如下表

+------+-------+-------+
| Id   | Name  | Blue  |
+------+-------+-------+
| 1    | Sam   | yes   |
| 2    | Mike  | yes   |
| 3    | Carol | yes   |
| 4    | Bob   | yes   |
| 5    | John  | yes   |
| 6    | Adam  | no    |
| 7    | David | yes   |
| 8    | Maria | no    |
+------+-------+-------+

我想要的是一个查询,它会重复提取“blue = yes”的所有行。再次尝试计算“blue = yes”的行数。所以结果应该是这样的。

+------+-------+-------+
| Id   | Name  | Blue  |
+------+-------+-------+
| 1    | Sam   | yes   |
| 2    | Mike  | yes   |
| 3    | Carol | yes   |
| 4    | Bob   | yes   |
| 5    | John  | yes   |
+------+-------+-------+

我在想我可以做到这一点

SELECT * where blue = "yes" and id = id + 1

但这不会返回任何数据。我只是无法弄清楚正确提取查询的逻辑。我做了一些研究,并认为临时表查询可能会起作用,但只是不确定如何做到这一点。感谢您的任何帮助!

标签: jquerymysqlvariablesrepeat

解决方案


可能不是最好的方法,但它似乎有效:

SET @count=(SELECT count(*) FROM test);

SET @get_count=(SELECT count(CASE WHEN
  @count >= id AND NOT blue="yes" THEN @count:=id END)
    FROM test ORDER BY id ASC);

SELECT * FROM test WHERE id < @count ORDER BY id ASC;

设置一个等于记录数的变量。id通过升序循环遍历记录。第一次NOT blue="yes"设置@count为那个id。此后 case 将始终为 false,因为剩余的 id 将始终大于@count。然后只需运行一个选择 id 小于 的查询@count


推荐阅读