我可以限制我显示的行,具体取决于行中的数字是否等于显示所有相等的行。例如,我有包含足球统计数据的数据库,我希望在一个赛季中显示前五名得分手,但在某些赛季,一些得分手在第三名有相同的进球数,而我的查询并没有显示所有因为我限于sql子句限制为5.有没有办法在某个条款中说明显示所有目标数量相等的行?
For example list of goalscorers
Goalscorer1 7 goals
Goalscorer2 6
Goalscorer3 4
Goalscorer4 3
Goalscorer5 3
......还有进球者6和7以及3个未展示的进球
答案 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”,这应该是罕见的,通常与一个或很少的列相关联。