我有一个具有group by的sql select查询.我想在group by语句后计算所有记录.有没有办法直接从sql?例如,拥有一个包含用户的表我想选择不同的城镇和用户总数
select town, count(*) from user
group by town
Run Code Online (Sandbox Code Playgroud)
我想要一个包含所有城镇的列,另一个列包含所有行中的用户数.
有3个城镇和58个用户的结果示例如下:
Town Count
Copenhagen 58
NewYork 58
Athens 58
Run Code Online (Sandbox Code Playgroud) 我需要获取查询的行数,并在一个查询中获取查询的列.计数应该是结果列的一部分(对于所有行,它应该是相同的,因为它是总数).
例如,如果我这样做:
select count(1) from table
我可以有总行数.
如果我这样做:
select a,b,c from table
我将获得查询的列的值.
我需要的是以一种非常有效的方式在一个查询中获取计数和列值.
例如:
select Count(1), a,b,c from table
没有分组,因为我想要总数.
我找到的唯一方法是执行临时表(使用变量),插入查询的结果,然后计数,然后返回两者的连接.但如果结果得到数千条记录,那就不会非常有效.
有任何想法吗?
我正在尝试通过选择计算一组返回的记录数。
这个 stackoverflow 问题很好地总结了不同的方法:
我想使用以下解决方案:
SELECT DISTINCT COUNT(*) OVER () AS TotalRecords
FROM table
GROUP BY column
Run Code Online (Sandbox Code Playgroud)
如何将其转换为 JOOQ 查询?
这就是我在 JOOQ 中执行简单计数查询的方式:
Record record = jooq.select( TABLE.COLUMN.count() ).from( TABLE).fetchOne();
return record.into( Long.class );
Run Code Online (Sandbox Code Playgroud)
是否可以在 JOOQ 语法中表达“DISTINCT COUNT(*) OVER () AS TotalRecords”?
詹姆士
我正在使用SQL Server 2005,我发现该HAVING子句的奇怪行为.
根据定义,该HAVING子句应该在分组后处理数据.但是,COUNT在HAVING子句中使用函数实际上是在对数据进行分组之前应用于数据.
我在这里失踪了什么?
样本数据:
DECLARE @ProductTypeIDsTable TABLE
(
A INT
)
INSERT INTO @ProductTypeIDsTable(A) VALUES
(10),(12),(12),(9),(9),(9)
DECLARE @IDsTable TABLE
(
B INT
)
INSERT INTO @IDsTable(B) VALUES
(9),(10),(12)
Run Code Online (Sandbox Code Playgroud)
有问题的查询:
SELECT A
FROM @ProductTypeIDsTable pt
INNER JOIN @IDsTable ids ON pt.A = ids.B
GROUP BY A
--HAVING COUNT (A) = 1 -- gives 10 (repeated once due to the join)
--HAVING COUNT (A) = 2 -- gives …Run Code Online (Sandbox Code Playgroud) 我有一个表,我希望通过使用某个键对数据进行分组来从中选择数据。对于每个组,我还想计算属于该组的行有多少符合特定标准。即使该组中的 0 行符合条件,我仍然希望返回该组并显示 0 行符合条件的“计数”字段。因此,我不能简单地使用“where”子句过滤掉不需要的行,而是简单地选择组内元素数量的计数。
任何帮助将不胜感激