2015-02-23 56 views
0

我尝试按结果计算组中的行数。 我想统计锻炼的次数,其中肌肉是1 我的问题是计数忽略了组。Mysql计数忽略组

我想用这样的:

SELECT COUNT(id) FROM soFitTest.users_program 

where user_name = 1127 AND muscle = 1 

group by exercise; 

在我的账,我得到3,但是当我运行查询没有这个数我只得到1行。

查看附件图片。

enter image description here

+1

你是什么架构'soFitTest.users_program' – Vihar 2015-02-23 10:58:04

+1

为什么你会组结果时你没有使用它的任何功能,甚至没有选择? – SMA 2015-02-23 10:59:51

+0

我想统计那里的肌肉数量为1 – dasdasd 2015-02-23 11:02:20

回答

0

如果你只是想计算行数,然后尝试,而不是在计数功能指定 “ID”, “COUNT(*)”。选择COUNT(*)FROM soFitTest.users_program其中user_name = 1127 AND肌肉= 1;其中,

希望这会有所帮助。

-1

答案是:

SELECT COUNT(t1.id) FROM 

(SELECT id FROM soFitTest.users_program 

where user_name = 1127 AND muscle = 1 group by exercise) t1; 
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是表users_programPK那么您可以使用该表的任何其他列,因为它的值由列exercise的值确定;但是这只有在exercisePK(这可能不是这种情况)。

总之,你可能想查询的是:

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

它过滤有user_name = 1127 AND muscle = 1然后进行群体从他们的行。每个组包含列exercise中具有相同值的所有行。从每个组生成一行到返回的结果集中。的行中包含exercise列的值(这是该组中的所有行的相同)和行的组(COUNT(*))中的号码。

0

如果你想获得exercices的数量,您的查询是正确的:

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

(COUNT(1)给出了相同的结果,COUNT(*),但不尝试检索数据库中的所有领域 - 它的效率更高)

如果你需要得到这些条件的所有行,你必须跳过GROUP BY:

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

'COUNT(*)'返回行数。它不检查在这些行中找到的值,它不关心“NULL”(或者字段是“NOT NULL”)。这与COUNT(1)' – axiac 2015-02-23 11:23:02

+0

相同这就是我的意思:) – 2015-02-23 20:24:58