PostgreSQL7.0手册-教程 -72. 查询语言
的目标;下面是通过运用子查询实现的方式:
SELECT city FROM weather
WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
这样做是可以的,因为子查询是一个独立的计算,它计算出与外层 select 无关的自身的聚集。
聚集在和 group by 子句联合使用时也是非常有用的。例如,我们可以用下面语句获取在每个城市观察到的最低温度的最高值
SELECT city, max(temp_lo)
FROM weather
GROUP BY city;
这个查询为每个城市输出一行。我们可以用 HAVING 过滤这些分组的行:
SELECT city, max(temp_lo)
FROM weather
GROUP BY city
HAVING min(temp_lo) < 0;
这个查询只给出那些最低温度有零下读数的城市。最后,如果我们只关心以 "P" 开头的城市,我们可以
SELECT city, max(temp_lo)
FROM weather
WHERE city like 'P%'
GROUP BY city
HAVING min(temp_lo) < 0;
请注意我们可以在 WHERE 子句里面给出城市名称的约束,因为这是不需要聚集的。这样比在 HAVING 上加限制更有效,因为我们不必对未通过 WHERE 检查的行进行分组和聚集计算。
--------------------------------------------------------------------------------
SELECT city FROM weather
WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
这样做是可以的,因为子查询是一个独立的计算,它计算出与外层 select 无关的自身的聚集。
聚集在和 group by 子句联合使用时也是非常有用的。例如,我们可以用下面语句获取在每个城市观察到的最低温度的最高值
SELECT city, max(temp_lo)
FROM weather
GROUP BY city;
这个查询为每个城市输出一行。我们可以用 HAVING 过滤这些分组的行:
SELECT city, max(temp_lo)
FROM weather
GROUP BY city
HAVING min(temp_lo) < 0;
这个查询只给出那些最低温度有零下读数的城市。最后,如果我们只关心以 "P" 开头的城市,我们可以
SELECT city, max(temp_lo)
FROM weather
WHERE city like 'P%'
GROUP BY city
HAVING min(temp_lo) < 0;
请注意我们可以在 WHERE 子句里面给出城市名称的约束,因为这是不需要聚集的。这样比在 HAVING 上加限制更有效,因为我们不必对未通过 WHERE 检查的行进行分组和聚集计算。
--------------------------------------------------------------------------------

