在下面写一个查询,检索出发港, 出发日期,航程(行)数量为列n,最小值 并且每组中的最大吨位(min_t / max_t)来自航行 表。按出发港和出发日期分组。过滤掉行 出发港为NULL或等于Batavia。过滤组 其中至少有两次航行。
我很接近,但我不明白他们对in each group (min_t / max_t)
我需要做什么?这是我应该得到的表......
# departure_harbour departure_date n min_t max_t
1 Batavia 1768 2 136 1150
这就是我的查询......
# departure_harbour departure_date MIN(tonnage) MAX(tonnage) n
1 NULL 1793 488 890 3
我有这个:
SELECT departure_harbour,
departure_date,
MIN(tonnage),
MAX(tonnage),
COUNT() AS n
FROM voyages
GROUP BY departure_harbour,
departure_date
HAVING departure_harbour IS NULL
OR departure_harbour = "Batavia"
当我在AS
之后陈述min_t和max_t时,它只是给我错误。我不知道该怎么做。除此之外:如何更改表中显示的列顺序?
答案 0 :(得分:0)
您应该使用NULL
和Batavia过滤 out 港口,您只需检索NULL
和Ceylon。你应该修复你的条款。
min_t和max_t是您应该为聚合列指定的名称,例如MIN(tonnage) as min_t
。
您没有过滤组至少要进行航行。您需要为该条件添加条件。
除了这些,你的努力似乎还可以。
答案 1 :(得分:0)
这是我在阅读作业时想到的。
我使用coalesce将null离港港口转换为Batavia,因为我们需要排除所有空值和Batavia。
SELECT departure_harbour
, departure_date
, count(1) n
, min (tonnage) min_t
, max(tonnage) max_t
FROM voyages
WHERE coalesce(departure_harbour,'Batavia') <> 'Batavia'
GROUP BY departure_harbour
, departure_date
HAVING count(1)>1