2016-11-13 48 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

複製一個不起作用的查詢是什麼?(有語法錯誤,結果是錯誤的)和完整的解決方案無助於學習... 。 –