【问题标题】:(Newbie) MySQL View(新手) MySQL 视图
【发布时间】: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 变量用于一个简单的数学方程式,用于检查玩家在一年中玩了超过三分之一的游戏。

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

【问题讨论】:

    标签: mysql join views


    【解决方案1】:

    您错过了视图的作用。
    您不能在一个视图中保存多个语句。这就像试图将两张表保存在一张表中。这是不可能的。

    您需要做的是,完全按照您的方式运行您的第一个 Select。将其保存为视图。然后,您可以像使用任何其他活动表一样使用该结果集,并在后续 Select 语句中将其连接到其他表。

    【讨论】:

    • 感谢 durbnpoisn 的回复。我确实意识到我不能在一个视图中使用多个语句。我展示第一个语句的原因是,它返回 2014 年的游戏总数,这是我需要在第二个语句 @numberOfGames 中使用的数字。我不能在第二个语句中使用 COUNT(g.id),因为它是 GROUPED BY c.pid - 它返回玩家总共玩过的游戏数,而不是实际玩过的游戏总数。希望这可以消除任何困惑,并希望您/有人可以提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-09-07
    • 2011-03-26
    • 1970-01-01
    • 2023-03-23
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多