首页 > 解决方案 > mysql LEFT JOIN 后跟 GROUP BY 与 BETWEEN 范围

问题描述

我很困惑我应该如何进行。这是我当前的 LEFT JOIN 命令,它工作得很好:

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

这非常适合制作这张桌子:

T_aver    |count|
-----------------
-0.2      | 2   |
3         | 2   |
5         | 1   |
-2.3      | 4   |
22        | 0   |

但现在我想更进一步,并按 T_aver 的范围(如 0-5、6-10、11-15 等的箱)和 SUM() 的计数列进行分组。例如,如果我要在上面的 LEFT JOIN 表示例中放置 -10 到 0 和 0 到 30 的范围,最终表将如下所示:

Trange    |count|
-----------------
-10 - 0   | 6   |
0 - 30    | 3   |

上述转变是我难过的地方,我害怕让我的生活更简单,我只需要创建一张大桌子......

提前致谢

标签: mysql

解决方案


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

如果您不想被绑定到固定间隔,请为您的垃圾箱使用另一个查找表:

垃圾箱:

mintemp | maxtemp
 -10    | 0
   0    | 30

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

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;

推荐阅读