(新手)MySQL View

时间:2014-06-27 20:21:06

标签: mysql join views

我是SQL的新手,可能会以错误的方式解决这个问题,但你可以帮忙吗?

我需要在MySQL中创建一个VIEW但我无法弄清楚如何组合这两个SQL语句,因为VIEW不接受多个SELECTS或变量。

注意:用正确的数字替换@numberOfGames var(手动计算)时,第二个语句完美无缺。

第一个声明 - 返回年度游戏总数:

SELECT COUNT( id ) INTO @numberOfGames FROM tblgames WHERE gdate LIKE '2014%';

第二条陈述 - 创建VIEW数据:

SELECT
p.player AS player,
COUNT( c.gid ) AS gameCount,
SUM( c.cash ) AS cash,
ROUND( AVG( c.cash ), 2 ) AS avg,
SUM( ( CASE WHEN ( c.wotn > 0 ) THEN c.wotn ELSE 0 END ) ) AS wotn,
SUM( ( CASE WHEN ( c.cash > 0 ) THEN c.cash ELSE 0 END ) ) AS cashWon,
SUM( ( CASE WHEN ( c.cash < 0 ) THEN c.cash ELSE 0 END ) ) AS cashLost,
ROUND( AVG( ( CASE WHEN ( c.cash >= 0 ) THEN c.cash END ) ),2 ) AS avgWin,
ROUND( AVG( ( CASE WHEN ( c.cash < 0 ) THEN c.cash END ) ),2 ) AS avgLoss,
IF(
( ( COUNT( c.pid ) > ( @numberOfGames / 3 ) ) AND ( COUNT( c.pid ) > 2 ) ),
ROUND( ( ( AVG( c.cash ) * 10 ) + 200 ), 2 ),
ROUND( AVG( c.cash ), 2 )
) AS sortingPoints
FROM tblplayers p
LEFT JOIN tblcash c ON p.id = c.pid
LEFT JOIN tblgames g ON g.id = c.gid
WHERE c.cash IS NOT NULL AND g.gdate LIKE '2014%'
GROUP BY c.pid
ORDER BY sortingPoints DESC;

我正在使用@numberOfGames变量来获得一个简单的数学方程式,该方程式检查玩家在一年中总游戏次数超过三分之一。

我希望有人可以帮我指出正确的方向。

1 个答案:

答案 0 :(得分:0)

你忽略了观点的作用 您无法在一个视图中保存多个语句。这就像试图在一个表中保存两个表。这是不可能的。

您需要做的是,完全按照您的要求运行您的第一个选择。将其另存为视图。然后,您可以将该结果集用作任何其他活动表,并将其连接到后续Select语句中的其他表。