如何重命名此SQL代码段中的多个列?

时间:2017-04-20 18:39:47

标签: mysql sql

  

在下面写一个查询,检索出发港,   出发日期,航程(行)数量为列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时,它只是给我错误。我不知道该怎么做。除此之外:如何更改表中显示的列顺序?

2 个答案:

答案 0 :(得分:0)

  1. 您应该使用NULL和Batavia过滤 out 港口,您只需检索NULL和Ceylon。你应该修复你的条款。

  2. min_t和max_t是您应该为聚合列指定的名称,例如MIN(tonnage) as min_t

  3. 您没有过滤组至少要进行航行。您需要为该条件添加条件。

  4. 除了这些,你的努力似乎还可以。

答案 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