【发布时间】:2014-06-27 20:21:06
【问题描述】:
我是 SQL 新手,可能会以错误的方式处理此问题,但您能帮忙吗?
我需要在 MySQL 中创建一个 VIEW,但我不知道如何组合这两个 SQL 语句,因为 VIEW 不接受多个 SELECTS 或变量。
注意:当用正确的数字(手动计算)替换 @numberOfGames 变量时,第二条语句可以完美运行。
第一条语句 - 返回当年的游戏总数:
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 变量用于一个简单的数学方程式,用于检查玩家在一年中玩了超过三分之一的游戏。
希望有人能帮我指出正确的方向。
【问题讨论】: