2015-10-05 114 views
0

我需要一些幫助來搞清楚我正在嘗試從我的教科書中找到兩個查詢。我似乎無法弄清楚。任何幫助,將不勝感激! 第一個查詢處理獲取賭場的賭場號碼,賭場的城市是所述城市的字母列表的第一個結果。混淆權利?訪問中的簡單SQL查詢

SELECT Location 
FROM Casino 
GROUP BY Location 
ORDER By Location; 

這是我到目前爲止。這將做的是把大西洋城作爲最重要的結果,這是我想要的。我很困惑的是如何完全獲得AtlanticCity並讓查詢顯示其賭場號碼(這使我相信我需要嵌套查詢)。

第二個查詢詢問在所有賭場玩相同老虎機的PlayerNums。我不知道如何解決這個問題。

感謝您的幫助! 下面是表格: https://gyazo.com/a961956b95e04dde93e7dabbba215dcb

+0

請發表您的完整表架構(定義)。 –

+0

以下是表格,我的歉意! https://gyazo.com/a961956b95e04dde93e7dabbba215dcb – Spichemen

+0

您可以顯示第二個查詢的樣本輸出所需輸出嗎? – Japongskie

回答

0

那麼,如果您使用的是JET引擎,那麼您實際上可以使用'TOP'關鍵字。

SELECT TOP 1 Location 
FROM Casino 
GROUP BY Location 
ORDER By Location; 

對於下一個,你可以發表表格和屬性嗎?

+0

這裏是表格,我的不好! https://gyazo.com/a961956b95e04dde93e7dabbba215dcb – Spichemen

+0

噢好吧。那麼如何 選擇頂部1賭場號碼賭場集團由位置ORDER BY位置; 這是第一個。 – Nathu

+0

工程太棒了!萬分感謝!我甚至沒有意識到TOP的存在。任何想法的第二? – Spichemen

0

(請注意:這是我的原始答案的編輯版本,已更正爲刪除我在發佈後發現的錯誤,例如,在三個賭場玩過一臺老虎機的玩家所有的賭場和四個賭場同樣有資格的老虎機,也沒有列出在所有賭場玩過合格的老虎機的玩家,如果他們還玩過至少一個其他合格的老虎機的話。已經在一個擴展的數據集上進行了測試,它只會列出在每個賭場玩過任何特定槽位的玩家至少一次,這也應該更容易理解。)

至於你的第二個問題,我建議以下爲soultion ...

SELECT DISTINCT PlayerNum 
FROM (SELECT PlayerNum, SlotNum, Count(*) AS CountSlot 
     FROM Plays 
     WHERE SlotNum IN 
      (SELECT SlotNum 
      FROM 
       (SELECT DISTINCT SlotNum, CasinoNum 
       FROM Plays) SlotCasino 
      GROUP BY SlotNum 
      HAVING COUNT(CasinoNum) = 
       (SELECT COUNT(CasinoNum) 
       FROM Casino)) 
     GROUP BY PlayerNum, SlotNum) EligiblePlayers 
WHERE CountSlot = (SELECT COUNT(CasinoNum) 
        FROM Casino); 

,我隨之而來的是,我應該確定哪些插槽已在所有的賭場被播放和球員們發揮的邏輯所有賭場的插槽。

SELECT DISTINCT SlotNum, CasinoNum 
FROM Plays 

我然後發現哪些時隙已在每個被播放 -

爲了找出哪些時隙已在所有的賭場被播放我第一分離槽起到和賭場的所有組合在使用播放用賭場的當前號碼 -

SELECT SlotNum 
FROM 
    (SELECT DISTINCT SlotNum, CasinoNum 
    FROM Plays) SlotCasino 
    GROUP BY SlotNum 
    HAVING COUNT(CasinoNum) = 
     (SELECT COUNT(CasinoNum) 
     FROM Casino) 

然後我發現了哪些球員已經在這些插槽以及有多少賭場使用玩過 -

SELECT PlayerNum, SlotNum, Count(*) AS CountSlot 
FROM Plays 
WHERE SlotNum IN 
    (SELECT SlotNum 
    FROM 
     (SELECT DISTINCT SlotNum, CasinoNum 
      FROM Plays) SlotCasino 
    GROUP BY SlotNum 
    HAVING COUNT(CasinoNum) = 
     (SELECT COUNT(CasinoNum) 
     FROM Casino)) 
GROUP BY PlayerNum, SlotNum 

我精這份名單隻在誰使用了該賭場的都起到了合格的老虎機玩家 -

SELECT DISTINCT PlayerNum 
FROM (SELECT PlayerNum, SlotNum, Count(*) AS CountSlot 
     FROM Plays 
     WHERE SlotNum IN 
      (SELECT SlotNum 
      FROM 
       (SELECT DISTINCT SlotNum, CasinoNum 
       FROM Plays) SlotCasino 
      GROUP BY SlotNum 
      HAVING COUNT(CasinoNum) = 
       (SELECT COUNT(CasinoNum) 
       FROM Casino)) 
     GROUP BY PlayerNum, SlotNum) EligiblePlayers 
WHERE CountSlot = (SELECT COUNT(CasinoNum) 
        FROM Casino); 

我希望,我已經充分解釋這一點。如果沒有,或者如果您有任何其他問題,請隨時回覆。

+0

最後一部分如何完善列表給玩過同一個slotmachine的玩家?我不明白它背後的邏輯。 – Spichemen

+0

你在Access中運行過這些嗎?我看到一些潛在的錯誤。 –

+0

Spichemen,我編輯了我的答案以刪除錯誤,並在此過程中刪除了導致您混淆的部分。你還希望我解釋一下嗎? – toonice