Mysql查询返回的记录数大于返回的行数

Mysql查询返回的记录数大于返回的行数,mysql,Mysql,Mysql查询只提供一条记录,而count函数提供多条记录 [编辑] 我的基本目标是统计尝试调查的用户数量。在表中,每一行代表调查中每个问题的答案。所以每一行都包含用户id 数据库表架构(表): +-------------+------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default

Mysql查询只提供一条记录,而count函数提供多条记录

[编辑] 我的基本目标是统计尝试调查的用户数量。在表中,每一行代表调查中每个问题的答案。所以每一行都包含用户id

数据库表架构(表):

+-------------+------------------+------+-----+---------------------+----------------+
| 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只对其计数一次