You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中结合WHERE与GROUP BY子句实现多字段条件数据查询?

正确结合WHERE与GROUP BY统计气温超35℃天数的方法

先看你的需求:统计2022年6月气温超过35摄氏度的天数,原SQL存在几个问题:

  • BETWEEN语法错误,应该用AND替代TO
  • GROUP BY temp > '35'写法不符合逻辑,且如果temp是数值类型,不能加单引号
  • 单纯统计超35℃的总天数,其实不需要GROUP BY,直接用WHERE过滤后聚合即可

1. 直接统计超35℃的总天数

如果只需要总数,最简单的写法:

SELECT COUNT(*) AS hot_days_count
FROM weather_data
WHERE day BETWEEN '2022-06-01' AND '2022-06-30'
  AND temp > 35; -- temp为数值类型时无需加引号

这里WHERE完成两步过滤:

  • 先筛选出2022年6月的所有日期数据
  • 再从中挑出气温超35℃的行
    最后用COUNT(*)统计符合条件的总行数,就是你要的高温天数。

2. 如果需要分组统计(超35℃/未超35℃的天数)

如果想同时知道6月里高温和非高温的天数分别是多少,可以用GROUP BY配合条件判断:

SELECT 
  CASE 
    WHEN temp > 35 THEN '气温超35℃'
    ELSE '气温≤35℃'
  END AS temp_category,
  COUNT(*) AS day_count
FROM weather_data
WHERE day BETWEEN '2022-06-01' AND '2022-06-30'
GROUP BY temp_category; -- 也可以直接GROUP BY CASE的判断逻辑

这里WHERE先过滤出6月的所有数据,再用CASE把气温分成两类,最后按分类分组统计天数。

WHERE和GROUP BY的核心逻辑

  • WHERE是分组前过滤:先排除所有不符合条件的行,剩下的行再参与分组和聚合计算
  • 如果需要对分组后的结果再次过滤(比如只看天数超过5天的分类),才用HAVING子句,示例:
SELECT 
  CASE WHEN temp >35 THEN '超35℃' ELSE '正常' END AS category,
  COUNT(*) AS day_count
FROM weather_data
WHERE day BETWEEN '2022-06-01' AND '2022-06-30'
GROUP BY category
HAVING day_count > 5; -- 只保留天数超过5天的分类

内容的提问来源于stack exchange,提问作者Dheeraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:20:56