2016-11-13 42 views
0

我有一张名为A10的表。我想创建一个名为A10T1的视图,该视图将显示每个状态的状态缩写,该状态没有人的值为Y.我需要使用子查询,但不会输出。SQL子查询:无猫状态

我当前的代码是:

CREATE VIEW A10T1 AS 
SELECT STATE 
FROM A10 
WHERE STATE IS NOT NULL AND ID IN 
(SELECT ID 
    FROM A10 
    GROUP BY ID 
    HAVING COUNT(ID) = 
    (SELECT MIN(CATLOVERS) 
    FROM (SELECT COUNT(ID) AS CATLOVERS 
      FROM A10 
      WHERE CAT = 'Y' 
      GROUP BY STATE))) 
ORDER BY STATE; 
+0

您所创建的视图。在视图上运行select以查看结果 – Rahul

+0

结果是一个名为STATE的列,其中没有任何内容...我应该看到至少几个州的州缩写 –

+0

看看您的HAVING子句。一方面,你拿国家猫人数计算MIN。 (如果存在任何具有零猫爱好者的状态,则该值应该为零,否则它不会为零)。另一方面,查找具有等于该最小值的ID的TOTAL计数的状态。如果那个MIN号码实际上是零,那么为什么在你正在寻找的状态下ID的TOTAL计数为零?这太复杂了(因此不值得修复),但它可能有助于理解你的尝试中的逻辑缺陷。 – mathguy

回答

2

可惜有人只给你一个任务答案,你可以练习复制/粘贴方式,但没有太多的学习情况。

为什么您的查询失败?

运行此查询本身:

SELECT COUNT(ID) AS CATLOVERS 
     FROM A10 
     WHERE CATLOVERS = 'Y' 
     GROUP BY STATE 

什么您从子查询得到的是一个正整数列,除非没有国家有catlovers =“Y”,如果这发生的子查询将返回NULL。

现在考虑

SELECT MIN(CATLOVERS) 
FROM (SELECT COUNT(ID) AS CATLOVERS 
     FROM A10 
     WHERE CATLOVERS = 'Y' 
     GROUP BY STATE)x 

等等一系列的正整数中的MIN()可能是一个,而这个子查询将返回1单行,除非第一个子查询返回NULL这也将导致NULL这里。

因此,这下一子查询将只列出的ID,其中计数(ID)=最小或没有行,如果前面的子查询是NULL

SELECT ID 
    FROM A10 
    GROUP BY ID 
    HAVING COUNT(ID) = 
    (SELECT MIN(CATLOVERS) 
    FROM (SELECT COUNT(ID) AS CATLOVERS 
      FROM A10 
      WHERE CATLOVERS = 'Y' 
      GROUP BY STATE)x) 

尝试独立运行的子查询,研究发生了什么。

见:http://data.stackexchange.com/stackoverflow/query/577188

+0

从上一张海报的答案错了反正...仍然看看你的提示,我非常感谢。只需要一些提示让我走上正轨 –

+0

@EarthlingPerson - 我会说你的问题陈述不明确,我不会责怪其他答案。很好 - 其他答案已经消失。 – mathguy

+0

直接从作业中创建:“创建一个名为A10T1的视图,该视图将显示A10表中没有人员且Cat值为Y的状态。“ –

-1

首先你需要创建视图:

CREATE OR replace VIEW a10t1 
AS 
    SELECT state 
    FROM a10 
    WHERE state IS NOT NULL 
     AND id IN (SELECT id 
        FROM a10 
        GROUP BY id 
        HAVING Count(id) = (SELECT Min(catlovers) 
             FROM (SELECT Count(id) AS CATLOVERS 
               FROM a10 
               WHERE cat = 'Y' 
               GROUP BY state))) 
    ORDER BY state; 

那么你可以从像这样的视图中选择:

select * from a10t1 
+0

复制一个不起作用的查询是什么?(有语法错误,结果是错误的)和完整的解决方案无助于学习... 。 –