我尝试按结果计算组中的行数。 我想计算肌肉是1的运动次数 我的问题是计数会忽略该组。
我想用这个:
SELECT COUNT(id) FROM soFitTest.users_program
where user_name = 1127 AND muscle = 1
group by exercise;
在我的计数中,我得到3,但是当我在没有这个计数的情况下运行查询时,我只得到1行。
见附图。
答案 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 BY
aggregate functions - 它们组合了组中所有行的值以生成单个值;例如,COUNT(*)
将计算每个组中的行数; GROUP BY
子句中显示的列的列;用简单的英语表示如果exercise
是表PK
的{{1}},那么您可以使用该表的任何其他列,因为它的值由列{{1}的值确定};但这只是users_program
是exercise
的情况(这可能不是这种情况)。总之,您可能想要的查询是:
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;