mysql选择查询结果错误,计数(*)和*
在Mysql中,我使用count()聚合函数进行分页,并使用*代替count()显示数据,但我得到的总计数和返回行数不同 问题1:mysql选择查询结果错误,计数(*)和*,mysql,sql,select,group-by,count,Mysql,Sql,Select,Group By,Count,在Mysql中,我使用count()聚合函数进行分页,并使用*代替count()显示数据,但我得到的总计数和返回行数不同 问题1: SELECT COUNT(*) FROM change_request INNER JOIN task_main_management ON cr_project_id = project_id LEFT JOIN all_module AS am ON am.m_id = task_m_id WHERE cr_tenent_id = '100' A
SELECT
COUNT(*)
FROM
change_request
INNER JOIN task_main_management ON cr_project_id = project_id
LEFT JOIN all_module AS am
ON
am.m_id = task_m_id
WHERE
cr_tenent_id = '100' AND cr_entity_id = '100' AND cr_project_id = 'PROJ_310820200746367254' AND cr_type = '2' AND change_request.cr_id = '16' AND task_main_management.cr_id = 'CHRQ_020920200807413904'
GROUP BY
change_request.cr_project_id
它有返回结果2
但是当我在select中使用*而不是COUNT(*)时,它给了我一行。您的查询有一个
分组依据。因此,COUNT(*)
是返回的一行中的值。如果使用聚合查询,则会更清楚:
SELECT change_request.cr_project_id, COUNT(*)
使用分组依据
和选择*
,查询格式不正确,应返回语法错误。不幸的是,MySQL的旧版本允许这种语法错误
我不确定您真正想要的是什么,但您可能只想删除分组依据
如果要计算结果集将包含多少条记录,请删除分组依据
子句并使用计数(不同的…
:
请注意,对于当前的groupby
子句,使用select*
是不正确的。您应该枚举SELECT
子句中的列,并可能对不是来自表change\u request的任何内容使用聚合函数,这是预期的行为。。给定
ariaDB [sandbox]> select * from t;
+------+--------------------+------------+------------+----------+
| id | venue | city | date | time |
+------+--------------------+------------+------------+----------+
| 1 | Waldorf Hotel | London | 2020-01-01 | 07:00:00 |
| 2 | Waldorf Hotel | London | 2020-01-02 | 07:00:00 |
| 3 | Heathrow | London | 2020-01-02 | 14:00:00 |
| 4 | Lennon Airport | Liverpool | 2020-01-02 | 16:00:00 |
| 5 | Port of Liverpool | Liverpool | 2020-01-02 | 19:30:00 |
| 6 | Port of Liverpool | Liverpool | 2020-01-03 | 07:00:00 |
| 7 | Port of Liverpool | Liverpool | 2020-01-04 | 07:00:00 |
| 8 | Port of Liverpool | Liverpool | 2020-01-05 | 07:00:00 |
| 9 | Port of Liverpool | Liverpool | 2020-01-06 | 07:00:00 |
| 10 | Manchester Airport | Manchester | 2020-01-06 | 12:40:00 |
| 11 | Heathrow | London | 2020-01-06 | 14:40:00 |
+------+--------------------+------------+------------+----------+
11 rows in set (0.001 sec)
MariaDB [sandbox]>
MariaDB [sandbox]> SELECT * FROM T WHERE CITY = 'LONDON' GROUP BY CITY;
+------+---------------+--------+------------+----------+
| id | venue | city | date | time |
+------+---------------+--------+------------+----------+
| 1 | Waldorf Hotel | London | 2020-01-01 | 07:00:00 |
+------+---------------+--------+------------+----------+
1 row in set (0.001 sec)
MariaDB [sandbox]>
MariaDB [sandbox]> SELECT COUNT(*)
-> FROM T
-> WHERE CITY = 'LONDON'
-> GROUP BY CITY;
+----------+
| COUNT(*) |
+----------+
| 4 |
+----------+
1 row in set (0.001 sec)
没有聚合函数的group by将返回1行非确定值
具有聚合函数但没有要聚合的列的group by将返回由where子句筛选的行的计数。共享查询和结果,包括和不包括计数我怀疑类似于select*from。。。按更改请求分组。更改项目ID
works@jainvikram444查询与问题中提到的相同。更改只有select字段*
和计数(*)
计数(*)
结果为2,但*
返回单行。@Vickysw。你没有抓住要点。“2”位于由分组依据
生成的单行中。如果要查看所有行,需要删除“分组依据”
。感谢您的回复。我理解你的想法,但总计数是我结构中的常见功能。。使用*
获得正确结果还有其他方法吗?
ariaDB [sandbox]> select * from t;
+------+--------------------+------------+------------+----------+
| id | venue | city | date | time |
+------+--------------------+------------+------------+----------+
| 1 | Waldorf Hotel | London | 2020-01-01 | 07:00:00 |
| 2 | Waldorf Hotel | London | 2020-01-02 | 07:00:00 |
| 3 | Heathrow | London | 2020-01-02 | 14:00:00 |
| 4 | Lennon Airport | Liverpool | 2020-01-02 | 16:00:00 |
| 5 | Port of Liverpool | Liverpool | 2020-01-02 | 19:30:00 |
| 6 | Port of Liverpool | Liverpool | 2020-01-03 | 07:00:00 |
| 7 | Port of Liverpool | Liverpool | 2020-01-04 | 07:00:00 |
| 8 | Port of Liverpool | Liverpool | 2020-01-05 | 07:00:00 |
| 9 | Port of Liverpool | Liverpool | 2020-01-06 | 07:00:00 |
| 10 | Manchester Airport | Manchester | 2020-01-06 | 12:40:00 |
| 11 | Heathrow | London | 2020-01-06 | 14:40:00 |
+------+--------------------+------------+------------+----------+
11 rows in set (0.001 sec)
MariaDB [sandbox]>
MariaDB [sandbox]> SELECT * FROM T WHERE CITY = 'LONDON' GROUP BY CITY;
+------+---------------+--------+------------+----------+
| id | venue | city | date | time |
+------+---------------+--------+------------+----------+
| 1 | Waldorf Hotel | London | 2020-01-01 | 07:00:00 |
+------+---------------+--------+------------+----------+
1 row in set (0.001 sec)
MariaDB [sandbox]>
MariaDB [sandbox]> SELECT COUNT(*)
-> FROM T
-> WHERE CITY = 'LONDON'
-> GROUP BY CITY;
+----------+
| COUNT(*) |
+----------+
| 4 |
+----------+
1 row in set (0.001 sec)