Sql 为什么即使我更改函数COUNT()中的参数,结果也总是相同的?
不管函数COUNT的括号内有什么参数,下面三段代码的结果都是相同的,为什么Sql 为什么即使我更改函数COUNT()中的参数,结果也总是相同的?,sql,ms-access,Sql,Ms Access,不管函数COUNT的括号内有什么参数,下面三段代码的结果都是相同的,为什么 SELECT Category.Category, Category.CategoryID, COUNT(Category) AS Popularity FROM FavCategory INNER JOIN Category ON FavCategory.CategoryID= Category.CategoryID GROUP BY Category, Category.CategoryID HAVING COUNT
SELECT Category.Category, Category.CategoryID, COUNT(Category) AS Popularity
FROM FavCategory INNER JOIN Category
ON FavCategory.CategoryID= Category.CategoryID
GROUP BY Category, Category.CategoryID
HAVING COUNT(FavCategory.MemberID)>=2;
SELECT Category.Category, Category.CategoryID, COUNT(FavCategory.CategoryID) AS Popularity
FROM FavCategory INNER JOIN Category
ON FavCategory.CategoryID= Category.CategoryID
GROUP BY Category, Category.CategoryID
HAVING COUNT(FavCategory.CategoryID)>=4;
SELECT Category.Category, Category.CategoryID, COUNT(FavCategory.MemberID) AS Popularity
FROM FavCategory INNER JOIN Category
ON FavCategory.CategoryID= Category.CategoryID
GROUP BY Category, Category.CategoryID
HAVING COUNT(FavCategory.MemberID)>=2;
SELECT Category.Category, Category.CategoryID, COUNT(FavCategory.MemberID+Category.CategoryID) AS Popularity
FROM FavCategory INNER JOIN Category
ON FavCategory.CategoryID= Category.CategoryID
GROUP BY Category, Category.CategoryID
HAVING COUNT(FavCategory.MemberID)>=2;
这是分类表和FAV分类表上的记录
我的猜测是,您实际上在寻找列的不同值,在这种情况下,请使用:
COUNT(DISTINCT (FavCategory.CategoryID))
等等
从中,您尚未指定正在使用的数据库:
COUNTALL表达式为组中的每一行计算表达式并返回非空值的数目
我相信一切都是默认的,而不是截然不同的
假设表中的所有值都不为null,那么仅使用表达式就相当于COUNT*——即,它将返回组的行数。这就是为什么每个表达式都给出相同的结果
如果您没有追求明显的结果,请解释您试图实现的目标,我们可能会建议一种替代方案。嗯,作为SQL初学者,其他人可能可以-我想我不会的。我猜您实际上是在为列指定不同的值,在这种情况下,请使用:
COUNT(DISTINCT (FavCategory.CategoryID))
等等
从中,您尚未指定正在使用的数据库:
COUNTALL表达式为组中的每一行计算表达式并返回非空值的数目
我相信一切都是默认的,而不是截然不同的
假设表中的所有值都不为null,那么仅使用表达式就相当于COUNT*——即,它将返回组的行数。这就是为什么每个表达式都给出相同的结果
如果您没有追求明显的结果,请解释您试图实现的目标,我们可能会建议一种替代方案。好吧,其他人可能可以-我想我不会,因为我是SQL初学者。您正在尝试获取Category、Category.CategoryID组合的行数。这意味着DB将创建这2列的所有unq组合,然后打印每个unq组合的行数。若在group子句和where子句中有相同的COL,那个么行数不会改变。有可能会影响行数,但如果没有数据查看,则很难判断其是否有任何影响您正在尝试获取Category、Category.CategoryID组合的行数。这意味着DB将创建这2列的所有unq组合,然后打印每个unq组合的行数。若在group子句和where子句中有相同的COL,那个么行数不会改变。有可能会影响行数,但如果没有数据查看,很难判断它是否有任何影响您正在询问原因。它们都是相同的,因为计数取决于字段/表达式是否为null或null。如果该值不为空,则计数;如果为null,则忽略它
表中没有任何空值,因此所有三个查询都报告相同的值。尝试COUNT'DRACULA',COUNT42,COUNT0甚至COUNT-1,它们将为CategoryID 3计数3,为CategoryID 1计数2,它们的工作方式与您的三个查询相同 当然,如果您使用的是内部联接,那么也可以使用COUNT*,事实上确实如此。如果您使用的是左联接,则使用COUNT*是不正确的,必须执行以下操作:COUNTsecondTable.foreignKeyColumnHere;或者,如果Access在Postgresql中支持基于cardinalitylike的计数,只需执行以下操作:COUNTsecondTable* 有关计数的入门知识和正确使用plug alert的启示,请阅读我在 @伊丹 鉴于这些数据:
create table Person
(
PersonId int not null primary key,
Name varchar(100) not null,
Middlename varchar(100) null
);
insert into Person(PersonId,Name,MiddleName) values
(1,'John','Winston'),
(2,'Paul','James'),
(3,'George',NULL),
(4,'Ringo','Parkin');
所有这些都将返回4:
select count(PersonID) from Person;
select count(Name) from Person;
select count(*) from Person;
select count(1) from Person;
select count(0) from Person;
select count(2) from Person;
select count(-1) from Person;
select count(42) from Person;
select count('Dracula') from Person;
除以下内容外,返回3:
select count(MiddleName) from Person;
现场测试:您正在询问原因。它们都是相同的,因为计数取决于字段/表达式是否为null或null。如果该值不为空,则计数;如果为null,则忽略它
表中没有任何空值,因此所有三个查询都报告相同的值。尝试COUNT'DRACULA',COUNT42,COUNT0甚至COUNT-1,它们将为CategoryID 3计数3,为CategoryID 1计数2,它们的工作方式与您的三个查询相同 当然,如果您使用的是内部联接,那么也可以使用COUNT*,事实上确实如此。如果您使用的是左联接,则使用COUNT*是不正确的,必须执行以下操作:COUNTsecondTable.foreignKeyColumnHere;或者,如果Access在Postgresql中支持基于cardinalitylike的计数,只需执行以下操作:COUNTsecondTable* 有关计数的入门知识和正确使用plug alert的启示,请阅读我在 @伊丹 鉴于这些数据:
create table Person
(
PersonId int not null primary key,
Name varchar(100) not null,
Middlename varchar(100) null
);
insert into Person(PersonId,Name,MiddleName) values
(1,'John','Winston'),
(2,'Paul','James'),
(3,'George',NULL),
(4,'Ringo','Parkin');
所有这些都将返回4:
select count(PersonID) from Person;
select count(Name) from Person;
select count(*) from Person;
select count(1) from Person;
select count(0) from Person;
select count(2) from Person;
select count(-1) from Person;
select count(42) from Person;
select count('Dracula') from Person;
除以下内容外,返回3:
select count(MiddleName) from Person;
现场测试:如果您希望在结果中更容易看到受欢迎程度,您可能应该添加一个ORDER BY子句,以按计数c对结果进行排序 专栏:
还请注意,在这种情况下,在上面的示例中,对联接表的FavCategory列MemberID之一的值进行计数是至关重要的。如果某些类别在FavCategories中没有匹配项,MemberID将为NULL,因此不会按计数计数。如果您希望在结果中更容易看到流行程度,您可能应该添加ORDER by子句以按计数列对结果进行排序:
SELECT
Category.Category,
Category.CategoryID,
COUNT(FavCategory.MemberID) AS Popularity
FROM FavCategory INNER JOIN Category
ON FavCategory.CategoryID= Category.CategoryID
GROUP BY Category, Category.CategoryID
HAVING COUNT(FavCategory.MemberID)>=2
ORDER BY Popularity DESC;
还请注意,在这种情况下,在上面的示例中,对联接表的FavCategory列MemberID之一的值进行计数是至关重要的。如果某些类别在FavCategories中没有匹配项,MemberID将为NULL,因此不按计数计数。好的,我使用的是MS Access,它不支持您提到的语法,例如COUNTDINSTINCT参数。我想知道的是每个电影类别的受欢迎程度。@JDein:那么我就用COUNT*-你只想知道每个组中的行数,对吗?我用的是MS Access,它不支持你提到的语法,比如COUNTDINSTINCT参数。我想知道的是每一类电影的受欢迎程度。@JDein:那么我用COUNT*-你只想知道每组电影的行数,对吗?您第一次查询的类别1和3的计数结果是什么?类别3的计数结果是什么?类别1的计数结果是什么?类别1的计数结果是什么?类别3的计数结果是什么?类别1的计数结果是什么?我是新手。你能解释一下COUNT'DRACULA',COUNT42,COUNT0,COUNT1和COUNT-1是什么意思吗?@JDein这是一种开玩笑的说法,表示任何要计算的参数,只要参数不为null,就被计算为1:-这就是为什么你所有关于问题的查询都返回相同的COUNT我是新手。你能解释一下COUNT'DRACULA',COUNT42,COUNT0,COUNT1和COUNT-1是什么意思吗?@JDein这是一种开玩笑的说法,表示任何要计算的参数,只要参数不为null,就被计算为1:-这就是为什么你所有关于问题的查询都返回相同的计数