2017-02-11 51 views
0

我正在構建一個收集網站,目前我正在處理的一件事是查詢某個用戶在一個系列中有多少個遊戲,該工作正常,下面的查詢輸出這樣的:獲取表的數量無視條款

<table style="width:100%;text-align:center"> 
 
    <tr> 
 
    <th>user_account_id</th> 
 
    <th>series_id</th> 
 
    <th>Name</th> 
 
    <th>COUNT(g.id)</th> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>7</td> 
 
    <td>Halo</td> 
 
    <td>2</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>11</td> 
 
    <td>Call of Duty</td> 
 
    <td>6</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>3</td> 
 
    <td>Forza</td> 
 
    <td>3</td> 
 
    </tr>  
 
</table>

SELECT uc.user_account_id, 
    g.series_id, 
    gs.name, 
    COUNT(g.id) 
FROM user_collections uc 
LEFT JOIN games g 
ON g.id = uc.game_id 
LEFT JOIN games_series gs 
ON gs.id = g.series_id 
WHERE uc.user_account_id = 1 
GROUP BY(g.series_id) 

我想弄清楚如何從我的games表基礎上提供series_id信息獲取所有行的完整計數S我的查詢的選擇部分。所以輸出相反,會是這樣:

<table style="width:100%;text-align:center"> 
 
    <tr> 
 
    <th>user_account_id</th> 
 
    <th>series_id</th> 
 
    <th>Name</th> 
 
    <th>COUNT(g.id)</th> 
 
    <th>Full Count</th> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>7</td> 
 
    <td>Halo</td> 
 
    <td>2</td> 
 
    <td>10</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>11</td> 
 
    <td>Call of Duty</td> 
 
    <td>6</td> 
 
    <td>12</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>3</td> 
 
    <td>Forza</td> 
 
    <td>3</td> 
 
    <td>8</td> 
 
    </tr>  
 
</table>

我試着做一個子選擇查詢,但它看起來像你不能做基於關閉的列的WHERE子句選擇查詢,所以我不太確定從哪裏去。

任何幫助,將不勝感激。謝謝!

+1

什麼是'全Count'在使用子查詢correllated?與COUNT有什麼不同? –

+0

'COUNT(g.id)'是用戶在其收藏中的數量。 「完整計數」是用戶可以擁有多少用戶。 – JTP

回答

1

的方法之一是在SELECT子句

SELECT uc.user_account_id, 
    g.series_id, 
    gs.name, 
    COUNT(g.id), 
    (SELECT COUNT(*) FROM games g1 WHERE g1.series_id = gs.id) as `Full Count` 
FROM user_collections uc 
JOIN games g 
ON g.id = uc.game_id 
JOIN games_series gs 
ON gs.id = g.series_id 
WHERE uc.user_account_id = 1 
GROUP BY(g.series_id) 
+0

哦,太棒了!謝謝,我從來沒有想到這一點!你的代碼工作正常,但我確實必須將'g1.series_id = gs.series_id'更改爲'g1.series_id = g.series_id' – JTP

+0

你是對的 - 沒有'gs.series_id'。但'gs.id'也應該可以工作。 –

+0

@JTP我也將LEFT JOINs改爲INNER JOIN。對於GROUP BY(g.series_id)',LEFT JOIN沒有意義。 –