我有以下代码
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
答案 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
;
这将形成整个查询的单个聚合组,并计算行数。
如果你想要别的东西,你需要进一步解释你想要做的事情。