我有一个具有group by的sql select查询 . 我想在group by语句之后计算所有记录 . 有没有办法直接从sql?例如,拥有一个包含用户的表我想选择不同的城镇和 total 用户数
select town, count(*) from user
group by town
我想要一个包含所有城镇的列,另一个列包含所有行中的用户数 .
拥有3个城镇和58个用户的结果示例如下:
Town Count
Copenhagen 58
NewYork 58
Athens 58
11 回答
我知道这是SQL Server中的旧帖子:
这将做你想要的(城镇列表,每个城镇的用户数量):
使用
GROUP BY
时,您可以使用大多数aggregate functions .Update (更改问题和评论后)
您可以为用户数声明一个变量,并将其设置为用户数,然后选择该用户 .
另一种方式是:
请尝试以下代码:
使用Oracle,您可以使用分析函数:
您的其他选择是使用子查询:
如果要选择城镇和总用户数,可以使用以下查询:
您可以在COUNT中使用DISTINCT,就像milkovsky所说的那样
在我的情况下:
这将把被认为与一个计数相同的user_id的答案投票数量拉出来
如果您想使用选择所有查询与计数选项,请尝试此...
你可以使用COUNT(DISTINCT ...):
如果你想按计数订购(声音很简单,但我找不到如何做到这一点的答案)你可以这样做:
十个未删除的答案;大部分都不做用户要求的 . 大多数答案误读了这个问题,认为每个城镇有58个用户,而不是总共58个 . 即使是少数正确的也不是最佳的 .
SHOW session status LIKE 'Handler%';
在OP的背景下:
由于
tot
只有一行,CROSS JOIN
并不像其他情况那样庞大 .通常的模式是
COUNT(*)
而不是COUNT(town)
. 后者意味着检查town
是否为null,这在此上下文中是不必要的 .