mysql - 连续非空值的计数

标签 mysql count group-by

以下查询中的计数应为 3 和 1。计数应该是连续获得的积分。因此,一旦用户未能获得任何积分,计数就会重新开始。

mysql> select name, count(*) from sortest group by name, (points = 0) OR (points is NULL)  having name= 'john';
+------+----------+
| name | count(*) |
+------+----------+
| john |        4 |
| john |        2 |
+------+----------+
2 rows in set (0.00 sec)

mysql> select * from sortest;
+----+------+--------+
| id | name | points |
+----+------+--------+
|  1 | john |     12 |
|  2 | john |     23 |
|  3 | john |     43 |
|  4 | hari |   NULL |
|  5 | hari |     56 |
|  6 | john |   NULL |
|  7 | hari |      0 |
|  8 | john |     44 |
|  9 | john |      0 |
| 10 | hari |     43 |
| 11 | hari |     44 |
| 12 | hari |     78 |
| 13 | hari |      0 |
+----+------+--------+
13 rows in set (0.00 sec)

mysql> show create table sortest\G
*************************** 1. row ***************************
       Table: sortest
Create Table: CREATE TABLE `sortest` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(100) default NULL,
  `points` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

在本例中,约翰的计数应为 5、1 和 2

5 和 1 因为它以 0 或 NULL 结尾,2 因为它尚未以 0 或 NULL 结束

mysql> select * from sortest;
+----+------+--------+
| id | name | points |
+----+------+--------+
|  1 | john |     12 |
|  2 | john |     23 |
|  3 | john |     43 |
|  4 | hari |   NULL |
|  5 | hari |     56 |
|  6 | john |   NULL |
|  7 | hari |      0 |
|  8 | john |     44 |
|  9 | john |      0 |
| 10 | hari |     43 |
| 11 | hari |     44 |
| 12 | hari |     78 |
| 13 | hari |      0 |
| 14 | john |     55 |
| 15 | john |     95 |
+----+------+--------+
15 rows in set (0.00 sec)

mysql> select name, count(*) from sortest group by name, (points = 0) OR (points is NULL)  having name= 'john';
+------+----------+
| name | count(*) |
+------+----------+
| john |        6 |
| john |        2 |
+------+----------+
2 rows in set (0.00 sec)

最佳答案

为什么计数应该是 3 和 1?您的查询分组依据:

  1. 姓名
  2. (点数 = 0 或点数为 NULL)

行,其中name=john(points = 0 OR point IS NULL),并且有 其他行,其中 name=john.

因此,您的查询正如您所描述的那样工作。您最终想要实现什么目标?

关于mysql - 连续非空值的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1321670/

相关文章:

php - 为什么 PHP 中的日期时间到时间戳转换不起作用?

mysql - 如何根据sql中最近的时间比较2条记录

c++ - 无法在我的字符串中找到准确数量的以标点符号(如引号)开头的单词

python - 从现有词典创建频率词典

mysql - 我可以在实体类中定义关系而不将它们存储在数据库中吗?

mysql - 从表中获取同一列中具有两个变量的所有行

MySQL:如何在线性时间内确定表A和B中的哪些行被表C中的行引用?

Python - 计算不同组中的范围(最高 - 最低)

mysql - 连接多列并在行内排序

python - 连续数据帧行之间的时间差