Mysql查询返回的记录数大于返回的行数
Mysql查询只提供一条记录,而count函数提供多条记录 [编辑] 我的基本目标是统计尝试调查的用户数量。在表中,每一行代表调查中每个问题的答案。所以每一行都包含用户id 数据库表架构(表):Mysql查询返回的记录数大于返回的行数,mysql,Mysql,Mysql查询只提供一条记录,而count函数提供多条记录 [编辑] 我的基本目标是统计尝试调查的用户数量。在表中,每一行代表调查中每个问题的答案。所以每一行都包含用户id 数据库表架构(表): +-------------+------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default
+-------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| survey_id | int(10) unsigned | NO | | NULL | |
| user_id | int(10) unsigned | NO | | NULL | |
+-------------+------------------+------+-----+---------------------+----------------+
+----+-----------+---------+
| id | survey_id | user_id |
+----+-----------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 1 |
| 3 | 1 | 1 |
+----+-----------+---------+
3 rows in set (0.00 sec)
表格中的数据(表格):
+-------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| survey_id | int(10) unsigned | NO | | NULL | |
| user_id | int(10) unsigned | NO | | NULL | |
+-------------+------------------+------+-----+---------------------+----------------+
+----+-----------+---------+
| id | survey_id | user_id |
+----+-----------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 1 |
| 3 | 1 | 1 |
+----+-----------+---------+
3 rows in set (0.00 sec)
计数查询:
SELECT count(*) AS total FROM `table` WHERE survey_id = 1 GROUP BY user_id
结果:
+-------+
| total |
+-------+
| 3 |
+-------+
1 row in set (0.00 sec)
+----+---------+-------+
| id | user_id | total |
+----+---------+-------+
| 1 | 1 | 1 |
+----+---------+-------+
1 row in set (0.00 sec)
简单查询:
SELECT id,user_id,survey_id AS total FROM `table` WHERE survey_id = 1 GROUP BY user_id
结果:
+-------+
| total |
+-------+
| 3 |
+-------+
1 row in set (0.00 sec)
+----+---------+-------+
| id | user_id | total |
+----+---------+-------+
| 1 | 1 | 1 |
+----+---------+-------+
1 row in set (0.00 sec)
渴望结果:
+-------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| survey_id | int(10) unsigned | NO | | NULL | |
| user_id | int(10) unsigned | NO | | NULL | |
+-------------+------------------+------+-----+---------------------+----------------+
+----+-----------+---------+
| id | survey_id | user_id |
+----+-----------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 1 |
| 3 | 1 | 1 |
+----+-----------+---------+
3 rows in set (0.00 sec)
行数和行数应相同
那么,为什么第二个查询返回单行而第一个计数查询不返回一行呢
如果还不清楚,请告诉我
任何帮助都可以提前得到 如果要计算组数
分组依据
返回值,可以使用计数(不同用户id)
,因为您误用了分组依据
。它的用途是用于聚合,如COUNT()/SUM()/MAX()/MIN()
,MySQL允许您按原样使用它,而不必对所有SELECT
列表列进行分组,但会产生意外和不确定的结果。您是否打算使用按用户id排序
?能否为我提供在查询中使用Group BY with count函数的最佳方法?不清楚您为什么要使用Group BY
,因为它用于聚合函数。请发布您试图获得的查询结果。在我的例子中,count应该是1。聚合count()
与将返回的行数有点不同。您正在查找SQL\u CALC\u FOUND\u ROWS
?您能解释一下为什么我们要在该场景中使用distinct in count函数吗?如果您只想计算组数,这是正确的,因为distinct只计算每个用户id,您可以解释一下以了解此行为背后的含义吗?我仍然不清楚。count distinct只对每个用户id计数一次,因此在您的示例中,id 1出现3次,但count distinct只对其计数一次