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相同,这就是我的意思: