我有一个充满运动成绩的数据库。我想根据以前结果的一些特征来选择一些结果。这是数据库结构:
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/