2017-02-11 50 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没有意义。 –