SQL限制为数字,如果相等

时间:2015-12-16 11:00:30

标签: mysql database mysqli

我可以限制我显示的行,具体取决于行中的数字是否等于显示所有相等的行。例如,我有包含足球统计数据的数据库,我希望在一个赛季中显示前五名得分手,但在某些赛季,一些得分手在第三名有相同的进球数,而我的查询并没有显示所有因为我限于sql子句限制为5.有没有办法在某个条款中说明显示所有目标数量相等的行?

For example list of goalscorers
Goalscorer1 7 goals
Goalscorer2 6
Goalscorer3 4
Goalscorer4 3
Goalscorer5 3

......还有进球者6和7以及3个未展示的进球

1 个答案:

答案 0 :(得分:1)

您需要确定什么是控制因素,在子查询中限制该因子,然后列出与其相关的事实。在这里,控制因素是目标的数量,相关的事实是踢出这么多目标的球员。

请参阅此SQL Fiddle

MySQL 5.6架构设置

CREATE TABLE Table1
    (`Player` varchar(20), `Goals` int)
;

INSERT INTO Table1
    (`Player`, `Goals`)
VALUES
    ('Goalscorer1', 7),
    ('Goalscorer2', 6),
    ('Goalscorer3', 4),
    ('Goalscorer6', 3),
    ('Goalscorer7', 3),
    ('Goalscorer4', 3),
    ('Goalscorer5', 3),
    ('Goalscorer11', 1)
;

查询1

select
    t.*
from table1 t
inner join (
          select distinct Goals from table1
          order by goals DESC
          limit 4
           ) sq on t.Goals = sq.Goals

<强> Results

|      Player | Goals |
|-------------|-------|
| Goalscorer1 |     7 |
| Goalscorer2 |     6 |
| Goalscorer3 |     4 |
| Goalscorer6 |     3 |
| Goalscorer7 |     3 |
| Goalscorer4 |     3 |
| Goalscorer5 |     3 |

我在下面引用的the pastebin query的重新制作版本:

SELECT
      t.*
FROM jos_playerstats t
      INNER JOIN (
            SELECT DISTINCT
                  jos_playerstats.goals
            FROM jos_playerstats
            WHERE jos_playerstats.idSeason = '".$urlID."'
            ORDER BY
                  jos_playerstats.goals DESC
            LIMIT 4
      ) sq ON t.goals = sq.goals
WHERE t.idSeason = '".$urlID."'

子查询必须只包含一个明确的目标列表,根本不包含其他列。另外:请不要养成在每个查询中添加distinct的习惯,因为性能会变差。只有在你真正需要的时候才使用“select distinct”,这应该是罕见的,通常与一个或很少的列相关联。