2014-09-10 72 views
0

我目前正在爲我的Magic:The Gathering Playgroup開發一個數據庫,該數據庫可以跟蹤甲板和更具體的哪些甲板贏得多少其他比賽等等。INNER JOIN不適合我

表 「贏得」 如下所示:

  • PNR(Playernumber這是在表玩家主鍵)
  • DNR(Decknumber這是在表甲板主鍵)
  • 日期(與MNR組合的主鍵)
  • MNR(一天中的Matchnumber)
  • PL(玩家在遊戲中的量)
  • LOC(洛卡代碼(包含所有玩家的快捷鍵,例如, AMT的球員亞歷克斯,馬丁和Tobias,見下文)

表的玩家是很容易的:

  • PNR
  • PNAME(Playersname)
  • SC(玩家快捷鍵)

現在我想提出一個查詢,它提供了預期勝率表(在4人遊戲中是1/4,在5人遊戲中是1/5等)以及Wi的實際數量每個玩家的ns(以及後來的預期和實際的Winrate,但我認爲一旦我有了這個寶貝,我就可以自己動手了)。 到目前爲止,我想出了水木清華這樣的:

SELECT a.'Player',a.'ExpectedWinrate',b.'Wins' 
FROM(
SELECT 
ROUND(((SUM(1/Pl))/Count(*))*100, 1) as 'ExpectedWinrate', 
Players.Pname as 'Player' 
FROM 
Wins, Players 
WHERE Code LIKE CONCAT('%', Players.SC, '%') 
GROUP BY Players.Pname) a 
INNER JOIN 
(SELECT 
Count(*) as 'Wins', 
Players.Pname as 'Players' 
FROM Players, Wins 
WHERE Players.PNr = Wins.PNr 
GROUP BY Players.Pname 
ORDER BY Count(*) desc) b ON 'Players' = 'Player'; 

,我碰到的問題是,我需要在一個查詢中兩個不同的東西COUNT(*),所以我不得不做兩個獨立的人加入他們,但我不知道如何「命名」他們(在這種情況下,我試着用「a」和「b」),以便使用像這樣的表達式。'玩家',a。 'ExpectedWinrate' 等

誰能幫MYSQL福利局^^

greetzSP

編輯:添加expample表...

CREATE TABLE Players 
(
PNr int primary key, 
Pname varchar(20), 
SC varchar(1) 
); 

INSERT INTO Players 
(PNr, Pname, SC) 
VALUES 
(1, 'Tobias', 'T'), 
(2, 'Alex', 'A'), 
(3, 'Martin', 'M'), 
(4, 'Maria', 'R'); 

CREATE TABLE Wins 
    (
    PNr int, 
    DNr int, 
    Pl int, 
    Code varchar(10) 
    ); 

INSERT INTO Wins 
(PNr, DNr, Pl, Code) 
VALUES 
(1, 13, 3, 'ATM'), 
(4, 1, 4, 'RTMA'), 
(3, 20, 3, 'RTM'); 

勝:(留出列在這個查詢中無所謂)

| PNR | DNR | PL | CODE | 
|-----|-----|----|------| 
| 1 | 13 | 3 | ATM | 
| 4 | 1 | 4 | RTMA | 
| 3 | 20 | 3 | RTM | 

玩家:

| PNR | PNAME | SC | 
|-----|--------|----| 
| 1 | Tobias | T | 
| 2 | Alex | A | 
| 3 | Martin | M | 
| 4 | Maria | R | 
+0

是不明確的數據是如何存儲在表上,您可以張貼在[sqlfiddle(HTTP一些數據和實例:// sqlfiddle.com/)? – Max 2014-09-10 10:54:59

+0

編輯請求的表格數據等在 – 2014-09-10 12:39:21

+0

'但我不知道如何「命名」他們'嘗試'從 贏得b,玩家a' – Horaciux 2014-09-10 13:04:52

回答

0
SELECT a.Player ,a.ExpectedWinrate ,b.Wins 
FROM(
    SELECT 
      ROUND(((SUM(1/w.Pl))/Count(*))*100, 1) as 'ExpectedWinrate' 
      ,p.Pname as 'Player' 
    FROM Wins w inner join Players p 
    on w.Code LIKE CONCAT('%', p.SC, '%') 
    GROUP BY p.Pname 
) a 
inner join 
(
    SELECT 
      Count(*) as 'Wins' 
      ,p.Pname as 'Players' 
    FROM Players p inner join Wins w 
    on p.PNr = w.PNr 
    GROUP BY p.Pname 
    --ORDER BY Count(*) desc 
) b 
ON a.Player = b.Players 

我已經測試過它的SQL Server上,嘗試在MySQL

+0

謝謝,看起來像唯一的事情,如果***編輯是我用' -s在aExpectedWinrate等... – 2014-09-10 13:52:08