首先,这是一个课程作业问题,所以我不是在寻找一个完整的答案,只是一个提示:)
我有一个“君主”数据库,里面有名字,房子(?),即位,加冕(?)它可以追踪君主(包括首相)。众议院和加冕典礼只适用于君主,如果君主是首相,则返回无效。
如下所示:
我需要编写一个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
子句,外部子句可以依赖于内部子句计算的值。