【问题标题】:Mysql and PHP queryMysql和PHP查询
【发布时间】:2014-04-29 13:13:29
【问题描述】:

我有一个球员表和分数表。球员表保存国家和分数表保存每个球员的分数。我想要一个单独显示每个国家/地区平均分数的查询。

目前我的查询是:

$queries[3]['sql'] = "SELECT country, avg(score) FROM scores JOIN players GROUP BY country DESC";

这会将国家/地区分组,但所有国家/地区的平均得分相同。

谢谢

【问题讨论】:

  • 你确定以这种方式加入两个表是正确的吗?

标签: php mysql sql


【解决方案1】:

您忘记了加入条件。 试试这个:

$queries[3]['sql'] = "SELECT country, avg(score) FROM scores As ss JOIN players As pp where ss.PlayerId=pp.PlayerId GROUP BY country";

【讨论】:

  • 我现在得到了以下查询,它给我一条消息说“没有结果” $queries[3]['sql'] = "SELECT country, avg(score) FROM player INNER JOIN score ON player.country=scores.score GROUP BY country DESC";
  • 因为 player.country 不应该匹配 score.score
【解决方案2】:

这是因为JOIN 没有条件的工作方式类似于CROSS JOIN,我猜这不是你想要的。您应该在ONWHERE 中添加条件:

SELECT 
   country, 
   AVG(score) 
FROM 
   scores JOIN players ON /* condition */ 
GROUP BY 
   country

【讨论】:

  • 你为什么使用 DESC?
【解决方案3】:

您需要一个子查询,该子查询来自连接到分数表的玩家,该子查询按连接到玩家表的玩家分组......例如。

选择 player.country、players.player、averagescore FROM 球员 内部联接 (SELECT player,AVG(score) AS averagescore FROM 国家 INNER JOIN 玩家开启 player.playerid=scores.playerid group by player)AS平均 ON averages.player=players.player

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 2012-02-15
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多