查询数据库并根据搜索参数返回每个位置的“总数”

Posted

技术标签:

【中文标题】查询数据库并根据搜索参数返回每个位置的“总数”【英文标题】:Query a database and return a 'total' for each location based on a search parameter 【发布时间】:2019-05-30 02:33:31 【问题描述】:

我正在为数据库创建一个 API,我目前正在尝试创建一个搜索端点,该端点采用搜索参数并返回所有“天”以及该参数的总出现次数。例如。 (列 = 度)(行 = 一年中的天数),如果参数是 30 度,我想选择 30 度列并返回一天达到 30 度的总次数。比如:星期一:0:,星期二 10,星期三:8,等等。

到目前为止,我已经根据参数选择了我想要使用的数据,但我无法将其每天汇总。到目前为止,我的尝试要么是 365 天的列表,要么是所有天数的总和。我知道我必须对 Temp 参数求和,但我不知道该怎么做才能得出每天的总数。

当前功能:

router.get('/search/:Temp', func(req, res) 
    req.temps.from('days').select('weekDay', req.params.Temp)
    .then((columns)=> 
        res.json('Search Result': rows)
    )

【问题讨论】:

【参考方案1】:

如果我理解正确,您的表格看起来像这样:

Id  Date        WeekDay     Temperature
----------------------------------------
1   2019-05-30  Thursday    25
2   2019-05-29  Wednesday   30
3   2019-05-28  Tuesday     30
4   2019-05-27  Monday      25
5   2019-05-26  Sunday      25
6   2019-05-25  Saturday    26
7   2019-05-24  Friday      27
8   2019-05-23  Thursday    25
9   2019-05-22  Wednesday   25
10  2019-05-21  Tuesday     30
11  2019-05-20  Monday      30
12  2019-05-19  Sunday      25
13  2019-05-18  Saturday    26
14  2019-05-17  Friday      25
15  2019-05-16  Thursday    25

如果给定温度,您希望得到类似这样的结果:

WeekDay     Occurences
-----------------------
Friday      1
Monday      1
Sunday      2
Thursday    3
Wednesday   1

您必须使用GROUP BY。在原始 SQL 中,它可以这样写:

SELECT
      WeekDay
    , COUNT(Temperature) AS Occurences
FROM Temperatures
WHERE Temperature = 25
GROUP BY WeekDay

这里的温度是 25。GROUP BY 子句将所有工作日组合在一起。当您将事物组合在一起时,您还必须使用聚合函数来决定如何将行组合在一起。在这种情况下,COUNT() 是要使用的聚合函数。

使用 Knex,它应该看起来像这样:

knex
  .select('WeekDay', knex.raw('COUNT(Temperature)'))
  .from('Temperatures')
  .where('Temperature', 25)
  .groupBy('WeekDay')

【讨论】:

完美运行,我不得不稍作改动,因为事实证明我还需要从另一个表中显示数据,因此之后必须合并一个连接。但按预期工作谢谢

以上是关于查询数据库并根据搜索参数返回每个位置的“总数”的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch搜索

移动端列表查询最佳实践

MYSQL查询--聚合函数查询

Rails 4,返回查询数据和总数

ES搜索结果中各个字段介绍

查询数据库以显示基于当前日期和月份的数据总数