sql - 如何根据其他行中的值选择行

标签 sql mysql

我有一个充满运动成绩的数据库。我想根据以前结果的一些特征来选择一些结果。这是数据库结构:

CREATE TABLE `results` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `date` DATETIME NOT NULL ,
    `home_score` INT NOT NULL ,
    `away_score` INT NOT NULL ,
    `home_team_id` INT NOT NULL ,
    `away_team_id` INT NOT NULL
);

因此,我想执行诸如“查找球队赢得前两场主场比赛的结果”之类的查询 - 即对于特定的 home_team_id 按日期排序,然后选择前两行中的每一行 home_score > away_score .

我知道这有点复杂,因此非常感谢任何有关如何解决此问题的指示。我目前有一个 PHP 版本(选择所有行然后执行此类查询)但性能非常慢并且它使用大量内存(数据库中有超过 20,000 行)。

编辑:感谢几个简洁的答案。不过,理想情况下,我希望能够在所有列上运行查询,而不仅仅是查看 W、D 或 L。一个更复杂的示例是“找到主队赢得前五个主场的所有结果客场至少输两球,而客队每场客场至少输一球。”

最佳答案

根据您需要的全部查询,我可能会考虑去规范化。 例如在团队表中添加列,例如

home_performance = 'WWDLWW'
away_performance = 'WWLLWL'
overall_performance = 'WWWWDLLLWWWL'

然后可以通过以下方式回答临时查询,例如赢得最近 2 场主场比赛

home_performance LIKE '%WW'

或者连胜 4 场将是 overall_performance LIKE '%WWWW%'

可以使用 GROUP_CONCAT 填充这些派生列

关于sql - 如何根据其他行中的值选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3083052/

相关文章:

sql - 如何使用单个命令有选择地[双]插入(T-SQL)?

sql - Crystal 报表 - 上个月的最后一天

mysql - 检查表是否可以存储更多

Php数组转MySQL查询条件结构

sql - 找出哪一列有特定的字符串并返回列号

sql - 如何从表中获取列类型?

sql - 解析 XML 以构建动态查询

mysql - SQL Server - 返回 null 的 SELECT 语句

mysql - 对连接结果进行排序和分组?

python - 安装 MySQL-Python 时出错