访问中的简单SQL查询

时间:2015-10-05 00:30:00

标签: sql ms-access

我需要一些帮助,找出我在教科书中尝试的两个问题。我似乎无法弄明白。任何帮助,将不胜感激! 第一个查询涉及获得赌场的赌场号码,其中城市是所述城市的按字母顺序排列的列表的第一个结果。混淆吧?

SELECT Location
FROM Casino
GROUP BY Location
ORDER By Location;

这是我到目前为止所拥有的。这将做的是将AtlanticCity作为最佳结果,这就是我想要的。我感到困惑的是如何单独获取AtlanticCity并让查询显示其赌场号(这让我相信我需要一个嵌套查询)。

第二个查询要求在所有赌场玩同一台老虎机的PlayerNums。我不知道如何处理这个问题。

感谢您的帮助! 以下是表格: https://gyazo.com/a961956b95e04dde93e7dabbba215dcb

2 个答案:

答案 0 :(得分:0)

你真的可以使用' TOP'关键字,如果您使用的是JET引擎。

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

对于下一个,您可以发布表和属性吗?

答案 1 :(得分:0)

(请注意:这是我原来答案的编辑版本,已经更正,以删除我在发布后确定的错误,例如,已经在三个赌场一个老虎机上玩过的玩家赌场和四个赌场是第二个同样合格的老虎机。它也没有列出在所有赌场玩过合格的老虎机的玩家,如果他们还玩过至少一个其他合格的老虎机。

此编辑版本已在扩展数据集上测试过。它将列出仅在每个赌场至少播放一次特定插槽的玩家列表。它也应该更容易理解。)

至于你的第二个问题,我建议以下作为一个灵魂......

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);

我遵循的逻辑是,我应该确定哪些赌场已经在所有赌场玩过,哪些玩家在所有赌场玩过那些老虎机。

为了弄清楚哪些老虎机已在所有赌场玩过,我首先将所有Slot组合和Casinos组合使用 -

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);

我希望我已经充分解释了这一点。如果没有,或者您有任何其他问题,请随时回复。