SQL Server 同一查询中的多个计数 - CosmosDB

Posted

技术标签:

【中文标题】SQL Server 同一查询中的多个计数 - CosmosDB【英文标题】:SQL Server Multiple Counts in the same Query - CosmosDB 【发布时间】:2021-05-25 16:01:51 【问题描述】:

我想创建一个查询,计算下面描述的文档集合中的喜欢和不喜欢的总数。


    "id": "403031b7-a1b6-4e08-9d82-360bb41b97cd",
    "car_id": "0839404d5bc4140f28abfd19329b0ebc",
    "created": 1621881785,
    "type": "like",
    "version": 1,
    "fingerprint": "kHqPGWS1Mj18sZFsP8Wl",



    "id": "403031b7-a1b6-4e08-9d82-360bb41b97cd",
    "car_id": "0839404d5bc4140f28abfd19329b0ebc",
    "created": 1621881785,
    "type": "unlike",
    "version": 1,
    "fingerprint": "kHqPGWS1Mj18sZFsP8Wl",


以下内容非常适合一次计数:

SELECT COUNT(1) AS likes from cars c WHERE c.type="like" and c.car_id="0839404d5bc4140f28abfd19329b0ebc"

但我想在同一查询中计算 c.type 为“like”和 c.type="unlike" 的展位喜欢和不喜欢。


结果如下:


    "likes": a,
    "unlikes": b

【问题讨论】:

【参考方案1】:

您可以使用条件聚合:

SELECT SUM(CASE WHEN c.type = 'like' THEN 1 ELSE 0 END) AS likes,
       SUM(CASE WHEN c.type = 'unlike' THEN 1 ELSE 0 END) as unlikes
FROM cars c
WHERE c.car_id = '0839404d5bc4140f28abfd19329b0ebc';

或者使用聚合:

select c.type, count(*)
from cars c
where c.car_id = '0839404d5bc4140f28abfd19329b0ebc'
group by c.type;

【讨论】:

巨大的坦克为您提供帮助!我没有得到第一个示例,但似乎 Cosmos DB 在其实现中遗漏了 CASE。 @AntonA 。 . .我想知道为什么有些供应商将语言称为 SQL。叹息。

以上是关于SQL Server 同一查询中的多个计数 - CosmosDB的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 计数查询

同一查询中的多个计数

同一个 SQL 语句中的多个条件计数 [重复]

如何提高 SQL Server 查询的性能以选择具有值的行不在子查询中的一次计数

sql [sql]使用日期过滤计算1个查询中的多个计数

单个 SQL 查询中的多个计数