首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql左转联接,后面跟着组by with中间的范围

mysql左转联接,后面跟着组by with中间的范围
EN

Stack Overflow用户
提问于 2020-03-25 18:53:57
回答 3查看 74关注 0票数 0

我对该怎么做感到困惑。下面是我当前的左联接命令,它运行得很好:

代码语言:javascript
复制
SELECT t1.avg_temperature as T_aver,
       t2.new_confirmed as count 
FROM 3_day_avg as t1 
LEFT JOIN table2 as t2 on t1.date = t2.date

这张桌子做得很好:

代码语言:javascript
复制
T_aver    |count|
-----------------
-0.2      | 2   |
3         | 2   |
5         | 1   |
-2.3      | 4   |
22        | 0   |

但是现在我想更进一步,按照T_aver的范围(如0-5、6-10、11-15等)和SUM()对计数列进行分组。例如,如果我要将范围放在上面的-10到0和0到30的左侧联接表示例中,最后一个表将如下所示:

代码语言:javascript
复制
Trange    |count|
-----------------
-10 - 0   | 6   |
0 - 30    | 3   |

以上的转变是我感到困惑的地方,我害怕让我的生活变得更简单,我只需要创建一个大桌子,而不是…

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-25 19:10:29

你离我很近!只需从现有查询开始,然后包装它。

对于您的回收箱,如果不希望绑定到固定的间隔,请使用另一个查找表:

垃圾箱:

代码语言:javascript
复制
mintemp | maxtemp
 -10    | 0
   0    | 30

我将使用num而不是count,因为我从不使用保留词作为列:

代码语言:javascript
复制
SELECT 
  CONCAT(mintemp, ' - ', maxtemp) AS Trange,
  SUM(baseview.num) AS num
FROM bins
INNER JOIN (
  SELECT
    t1.avg_temperature as T_aver,
    t2.new_confirmed as num
  FROM 3_day_avg as t1
  LEFT JOIN table2 as t2 on t1.date = t2.date
  ) AS baseview
ON baseview.T_aver>bins.mintemp AND baseview.T_aver<=bins.maxtemp
GROUP BY bins.mintemp;
票数 0
EN

Stack Overflow用户

发布于 2020-03-25 19:13:42

代码语言:javascript
复制
SELECT ranges.caption Trange,
       SUM(t2.new_confirmed) as `count` 
FROM 3_day_avg as t1 
LEFT JOIN table2 as t2 on t1.date = t2.date
JOIN ( SELECT -10 t_from, 0 t_to, '-10 - 0' caption 
       UNION ALL
       SELECT 0, 30, '0 - 30' ) ranges ON t1.avg_temperature >= ranges.t_from 
                                      AND t1.avg_temperature < ranges.t_to 
GROUP BY ranges.caption;

最好是创建静态ranges表,而不是动态生成。这允许创建和存储许多预定义的范围集。

票数 0
EN

Stack Overflow用户

发布于 2020-03-25 19:20:44

您可以按包含回收箱的CASE表达式进行分组:

代码语言:javascript
复制
SELECT
  CASE 
    WHEN t1.avg_temperature >= -10 and t1.avg_temperature <= 0 THEN '-10 - 0'
    WHEN t1.avg_temperature > 0 and t1.avg_temperature <=30 THEN '0 - 30'
  END AS Trange,
  SUM(t2.new_confirmed) AS count 
FROM 3_day_avg AS t1 LEFT JOIN table2 AS t2 
ON t1.date = t2.date
GROUP BY Trange

您可以在CASE表达式中添加更多的回收箱,更改范围和不等式符号以满足您的要求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60855516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档