Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql计数忽略分组依据_Mysql - Fatal编程技术网

Mysql计数忽略分组依据

Mysql计数忽略分组依据,mysql,Mysql,我尝试按结果计算组中的行数。 我想数一数有1块肌肉的运动次数 我的问题是计数忽略了分组 我想用这个: SELECT COUNT(id) FROM soFitTest.users_program where user_name = 1127 AND muscle = 1 group by exercise; 在我的计数中,我得到了3行,但是当我在没有这个计数的情况下运行查询时,我只得到了1行 请参阅附件中的图像 如果只是尝试对行进行计数,请尝试计数*,而不是在计数函数中指定id 从soFi

我尝试按结果计算组中的行数。
我想数一数有1块肌肉的运动次数 我的问题是计数忽略了分组

我想用这个:

SELECT COUNT(id) FROM soFitTest.users_program 

where user_name = 1127 AND muscle = 1

group by exercise;
在我的计数中,我得到了3行,但是当我在没有这个计数的情况下运行查询时,我只得到了1行

请参阅附件中的图像


如果只是尝试对行进行计数,请尝试计数*,而不是在计数函数中指定id

从soFitTest.users\u程序中选择COUNT*,其中user\u name=1127,muscle=1

希望这有帮助。

答案是:

SELECT COUNT(t1.id) FROM 

(SELECT id FROM soFitTest.users_program 

where user_name = 1127 AND muscle = 1 group by exercise) t1;

根据SQL标准,图像中的第一个查询无效:

SELECT *
FROM soFitTest.users_program 
WHERE user_name = 1127 AND muscle = 1
GROUP BY exercise
MySQL接受它并生成一个结果,但它返回的值没有确定。文档页面中介绍了有关的内容

如果表中的行在物理存储器上以不同的顺序存储,那么同一查询可能会产生不同的结果

您应该运行:

SELECT *
FROM soFitTest.users_program 
WHERE user_name = 1127 AND muscle = 1
i、 e.不使用GROUP BY查看哪些行符合条件,然后再按GROUP BY进行聚合

然后,在添加GROUP BY子句时,仅将以下内容放入SELECT子句:

出现在GROUPBY子句中的列—例如,练习; -它们将组中所有行的值组合起来,生成一个值;COUNT*例如,将计算每个组中的行数; 您可以添加功能上依赖于GROUPBY子句中出现的列的列;在简单的英语中,这意味着如果exercise是table users\u程序的主键,那么您可以使用该表的任何其他列,因为其值由列exercise的值决定;但这只是在运动是PK的情况下,这里可能不是这样。 总之,您可能需要的查询是:

SELECT exercise, COUNT(*)
FROM soFitTest.users_program 
WHERE user_name = 1127 AND muscle = 1
GROUP BY exercise

它过滤user_name=1127和muscle=1的行,然后将它们组成组。每个组包含列练习中具有相同值的所有行。它从每个组生成一行到返回的结果集中。该行包含列练习的值,该值对于组中的所有行和组计数*中的行数相同

如果要获取练习的计数,您的查询是正确的:

SELECT COUNT(1) FROM soFitTest.users_program where user_name = 1127 AND muscle = 1;
COUNT1给出与COUNT*相同的结果,但不尝试从DB中检索所有字段-它更有效

如果需要获取具有这些条件的所有行,则必须跳过分组依据:

SELECT * FROM soFitTest.users_program where user_name = 1127 AND muscle = 1
这个怎么样:

SELECT COUNT(DISTINCT(exercise)) FROM ......

您对soFitTest.users\u程序的模式是什么?如果您不使用任何功能(甚至不在select中),为什么要对结果进行分组?我想计算有肌肉的运动次数1 count*返回行数。它不检查在这些行中找到的值,它不关心NULL或字段不为NULL。与Count1相同,这就是我的意思: