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

时间:2019-05-30 02:33:31

标签: javascript sql node.js knex.js

我正在为数据库创建一个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 个答案:

答案 0 :(得分:0)

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

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')