Mysql计数忽略group by

时间:2015-02-23 10:55:15

标签: mysql

我尝试按结果计算组中的行数。 我想计算肌肉是1的运动次数 我的问题是计数会忽略该组。

我想用这个:

SELECT COUNT(id) FROM soFitTest.users_program 

where user_name = 1127 AND muscle = 1

group by exercise;

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

见附图。

enter image description here

5 个答案:

答案 0 :(得分:0)

如果您只想计算行数,请尝试" count(*)",而不是指定" id"在计数功能。

SELECT COUNT(*)FROM soFitTest.users_program where user_name = 1127 AND muscle = 1;

希望这有帮助。

答案 1 :(得分:0)

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

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

MySQL接受它并产生结果,但它返回的值不确定。有关how MYSQL handles GROUP BY的文档页面对此进行了解释。

如果表中的行以不同的顺序存储在物理存储上,则相同的查询可能会产生不同的结果。

你应该跑:

SELECT *
FROM soFitTest.users_program 
WHERE user_name = 1127 AND muscle = 1

即。在GROUP BY汇总之前,没有GROUP BY查看哪些行符合条件。

然后,当您添加GROUP BY子句时,只需输入SELECT子句:

  • GROUP BY子句中显示的列 - 例如exercise;
  • GROUP BYaggregate functions - 它们组合了组中所有行的值以生成单个值;例如,COUNT(*)将计算每个组中的行数;
  • 您可以添加功能上依赖于GROUP BY子句中显示的列的列;用简单的英语表示如果exercise是表PK的{​​{1}},那么您可以使用该表的任何其他列,因为它的值由列{{1}的值确定};但这只是users_programexercise的情况(这可能不是这种情况)。

总之,您可能想要的查询是:

exercise

它会过滤包含PK的行,然后从中创建组。每个组包含列SELECT exercise, COUNT(*) FROM soFitTest.users_program WHERE user_name = 1127 AND muscle = 1 GROUP BY exercise 中具有相同值的所有行。从每个组中,它在返回的结果集中生成一行。该行包含列user_name = 1127 AND muscle = 1的值(对于组中的所有行都相同)和组中的行数(exercise)。

答案 2 :(得分:0)

如果您想获得练习数,您的查询是正确的:

SELECT COUNT(1) FROM soFitTest.users_program where user_name = 1127 AND muscle = 1;

(COUNT(1)给出的结果与COUNT(*)相同,但不会尝试从DB中检索所有字段 - 效率更高)

如果您需要获取具有这些条件的所有行,则必须跳过GROUP BY:

SELECT * FROM soFitTest.users_program where user_name = 1127 AND muscle = 1

答案 3 :(得分:0)

这个怎么样:

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

答案 4 :(得分:-1)

答案是:

SELECT COUNT(t1.id) FROM 

(SELECT id FROM soFitTest.users_program 

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