SQL 和 Mongo 等效查询

Posted

技术标签:

【中文标题】SQL 和 Mongo 等效查询【英文标题】:SQL and Mongo Equivalent query 【发布时间】:2016-02-24 23:17:02 【问题描述】:

我有一个 UserData 表,其结构类似于

 id category    value
 1  AR          100
 2  WT          90
 3  WT          12
 4  AR          1000
 5  AR          2005
 6  WT          122
 7  BP          112
 8  BP          18

现在我想选择在单个类别中具有最大值的所有行。所以我的结果集应该是。

id  category    value   
5   AR          2005    
6   WT          122     
7   BP          112 

我想在 MongoDB 和 SQL 服务器查询中都有这个。

在 SQL 中我试过这个

     select id,category,value from
        (select id,
                category,
                value,
                max(value)
        over (partition by category) result
        from   UserData ) a 
       where a.result=a.value order by a.id

这给了我想要的结果,但不知何故我觉得它不好

所以我想要一个更好的 SQL 解决方案和 MongoDB 的相应等效解决方案

【问题讨论】:

如果您的 SQL 工作正常,那么您没有使用 mysql 是的,我在 sql server management studio 中使用 sql 查询。 您应该针对每种格式提出 一个 问题。否则结果(并且已经发生)是您很可能会收到一个答案,答案是其中一个,而不是两个。 当然。我会记住这一点 【参考方案1】:

我不确定 mongo 解决方案,但如果您不关心 Id - 这是获得类别最高价值的方法。

   SELECT   DISTINCT
            Category, MAX(Value)
   FROM     UserData
   GROUP BY category

如果这比您想要的更简单,请原谅。

【讨论】:

你不应该需要 DISTINCT 和 GROUP BY。 当你在同一个集合中有类别和最大值时你会这样做。我在 sql server management studio 2012 中测试过。 我还需要获取 ID。此外,我们不需要在这里区分 如果您需要获取 id - 我相信您所拥有的是最好的解决方案。也许一些伟大的头脑会带来更好的东西,我不得不承认这不是最优雅的方式,但它确实有效。

以上是关于SQL 和 Mongo 等效查询的主要内容,如果未能解决你的问题,请参考以下文章

用于原始 SQL 查询的等效 Laravel Eloquent

LINQ 和 SQL 中看似等效的查询返回不同的结果 [重复]

如何将任何给定的 SQL/HQL 选择查询动态转换为等效计数查询?

SQL左反半连接等效查询

此 SQL 查询的 MongoDB 等效项

将 SQL 查询转换为 Mongo 聚合