首先,这是一个课程作业问题,所以我不是在寻找一个完整的答案,只是一个提示:)
我有一个“君主”数据库,里面有名字,房子(?),即位,加冕(?)它可以追踪君主(包括首相)。众议院和加冕典礼只适用于君主,如果君主是首相,则返回无效。
如下所示:
sql - (PostgreSQL)9.3.11中THEN的案例声明COUNT-LMLPHP
我需要编写一个psql查询,返回scheme(house,17,18,19,20),列出17,18,19和20世纪每个皇室继承王位的君主数量,并有一个问题要添加什么作为我当时的查询。
编辑:
谢谢你的建议!我现在对我的查询做了一些更改:

 SELECT  house,
         TO_CHAR(accession, 'YYYY' ) AS accession_year,
         COUNT(CASE WHEN accession_year BETWEEN 1601 AND 1700 THEN name END) AS seventeenth,
         COUNT(CASE WHEN accession_year BETWEEN 1701 AND 1800 THEN name END) AS eighteenth,
         COUNT(CASE WHEN accession_year BETWEEN 1801 AND 1900 THEN name END) AS nineteenth,
         COUNT(CASE WHEN accession_year BETWEEN 1901 AND 2000 THEN name END) AS twentieth,
  FROM monarch
  WHERE house IS NOT NULL
  GROUP BY house
  ;

现在PSQL告诉我Access一年不存在。我不想使用完整的加入日期,以防声明。如何在查询中仍然使用我的TO_字符?

最佳答案

单个SELECT子句中的每个表达式都被计算为“好像”它与同一子句中的所有其他表达式并行计算。因此,不允许它们之间有任何依赖关系,因为在开始时没有可用的结果值。
一个选项是引入子查询:

SELECT  house,
         accession_year,
         COUNT(CASE WHEN accession_year BETWEEN 1601 AND 1700 THEN name END) AS seventeenth,
         COUNT(CASE WHEN accession_year BETWEEN 1701 AND 1800 THEN name END) AS eighteenth,
         COUNT(CASE WHEN accession_year BETWEEN 1801 AND 1900 THEN name END) AS nineteenth,
         COUNT(CASE WHEN accession_year BETWEEN 1901 AND 2000 THEN name END) AS twentieth,
  FROM (
     SELECT house,name,TO_CHAR(accession, 'YYYY' ) AS accession_year
     FROM monarch
     WHERE house IS NOT NULL ) AS t
  GROUP BY house
  ;

现在有两个独立的SELECT子句,外部子句可以依赖于内部子句计算的值。

10-08 07:20
查看更多