SQL - Count(*)不按预期方式运行

时间:2015-08-20 23:41:24

标签: sql ms-access-2007

我有以下代码

SELECT C_Record.BunchOfColumns, Count(*) AS Degrees 
FROM C_Record
WHERE (((C_Record.[C#])=[Enter Value])) //Parameter Input from User
GROUP BY C_Record.BunchofColumns;

My Degrees列永远不会增加,无论查询返回多少行,它都会显示1。我怀疑我没有正确实施GROUP BY方法。如果我理解正确,那么所有选中但不属于聚合函数的列(在我的情况下为COUNT)应该放在GROUP BY中。任何帮助深表感谢。提前致谢

编辑:我想要实现的是检查列的特定值有多少行,然后选择所有其他相关列并创建索引列。例如,如果有三行符合我的要求

Col1 Col2 Degrees
 A     X    1
 B     Y    2
 C     Z    3

如果只有2行符合我的要求那么

Col1 Col2 Degrees
 P     X    1
 Q     Y    2

P.S - 我的C_Record.BunchofColumns包含大约10列,为简洁起见,我没有包含这些列。

P.P.S - 如果我试图跳过任何列,它会给我错误You Tried to execute a query that does not include the specified expression <<column_name>> as part of an aggregate function

2 个答案:

答案 0 :(得分:1)

Count()GROUP BY一起使用时,返回的计数是每个组中的行数。因此,要获得大于1的计数,您必须在表中具有多个具有完全相同值的行。如果您选择10个不同的列,则数据库中似乎没有两列具有正好相同的10个值。

如果您从一个列开始选择和分组,您将看到多个计数。

答案 1 :(得分:1)

这不是GROUP BY的工作原理。

GROUP BY完全更改了查询的含义。结果的每一行都是原始行的“聚合分组”。每个聚合分组由具有GROUP BY列的特定值组合的所有行组成。因此,如果您使用GROUP BY十列,则每个分组将包含在所有十列中相同的行。

一旦形成了这些分组,您就可以选择各种聚合值,例如count()sum(),它们为您提供有关整个群组的信息。 count(*)为您提供组中的行数,而count(column)为您提供column非NULL的行数。您还可以选择GROUP BY子句中出现的任何列,因为这些列在整个组中都是相同的。

您获得的count(*)因为每个组只包含一行。这可能是因为您按十列分组,并且没有两行对于所有十列都是相同的。

如果您只想要计算满足某些查询的行数,并且您根本不需要这种聚合,则可以这样写:

SELECT count(*)
FROM something
WHERE something
-- no GROUP BY
;

这将形成整个查询的单个聚合组,并计算行数。

如果你想要别的东西,你需要进一步解释你想要做的事情。