如何只返回一列的计数结果?
Posted
技术标签:
【中文标题】如何只返回一列的计数结果?【英文标题】:How to return a count result of only one column? 【发布时间】:2020-05-11 13:26:39 【问题描述】:我有一张这样的桌子:
并且想按时间段(日期字段)进行选择,我可以在其中返回寄存器,并且一列中的寄存器总数仅与一列匹配。
例如: 如果我使用这个查询:
SELECT date, product_type, operation, unit
FROM table
WHERE date BETWEEN '2019-08-26 00:00:00' AND '2019-08-26 23:59:59';
它必须返回:
但我希望我可以再返回一列,无论期间的操作总数是这样的:
在这种情况下,6 是“ajoy”在表格中出现的频率。
重要!如果我选择一个返回两个或多个操作的时间段,那么查询也必须能够返回它们的频率。
【问题讨论】:
请记住,表是有名字的——并给了我们一个可以使用的名字。否则,人们必须在动态中发明名称,这可能会导致答案中有很多不同的名称(如果有多个答案),这使得比较答案变得困难。 @JonathanLeffler 你是对的。对此感到抱歉。我将在另一个问题中考虑这一点。 【参考方案1】:我使用了您的部分数据,并将在表格中包含我所拥有的数据,但我相信这就是您想要的
create table mytab (job int, operations char(8), prod char(8),
ts_date datetime year to minute, unit int) lock mode row;
insert into mytab values(22, "ajoy","arrow","2020-05-11 08:51", 20);
insert into mytab values(22, "ajoy","arrow","2020-05-11 08:51", 20);
insert into mytab values(22, "ajoy","arrow","2020-05-11 08:51", 20);
insert into mytab values(22, "ajoy","arrow","2020-04-11 14:15", 20);
insert into mytab values(22, "ajoy","arrow","2020-04-11 14:15", 20);
insert into mytab values(22, "ajoy","arrow","2020-04-11 14:15", 20);
insert into mytab values(23, "dinn","curve","2020-05-11 08:51",1);
insert into mytab values(23, "dinn","point","2020-05-11 08:51",1);
insert into mytab values(23, "dinn","arrow","2020-04-11 08:51",1);
查询:
select job, operations, prod, ts_date, unit, (select count(*) from mytab b
where b.operations = a.operations) total_operation from mytab a where
a.ts_date between "2020-05-11 08:50" and "2020-05-11 08:59"
上面的查询给了我以下结果,我认为这就是你所要求的:
job operations prod ts_date unit total_operation
22 ajoy arrow 2020-05-11 08:51 20 6
22 ajoy arrow 2020-05-11 08:51 20 6
22 ajoy arrow 2020-05-11 08:51 20 6
23 dinn curve 2020-05-11 08:51 1 3
23 dinn point 2020-05-11 08:51 1 3
这个例子很小,没有包含/考虑你可以放在表上以提高查询性能的索引。
【讨论】:
以上是关于如何只返回一列的计数结果?的主要内容,如果未能解决你的问题,请参考以下文章
使用 CriteriaBuilder 的 JPA 计数(*)。如何使用 CriteriaBuilder 检索 count(*) 列