mysql:查找具有重复值和条件的行[重复]
Posted
技术标签:
【中文标题】mysql:查找具有重复值和条件的行[重复]【英文标题】:mysql: find rows with repeated values plus condition [duplicate] 【发布时间】:2015-12-18 20:18:24 【问题描述】:我有一个表“玩家”如下 在哪里: ID 是主键。
date = 他们玩的日期(仅 1 个月,因此可以从 1 到 30) 姓名 = 球员姓名 Sport = 他们从事的运动,列表中可能有很多运动;但我只关注“足球”一个这是桌子
+----+------------+-------+-------------+
| ID | Date | Name | Sport |
+----+------------+-------+-------------+
| 1 | 1 | A | football |
| 2 | 1 | A | soccer |
| 3 | 3 | A | tennis |
| 4 | 2 | B | tennis |
| 5 | 2 | B | football |
| 6 | 1 | C | basketball |
| 7 | 1 | C | tennis |
| 8 | 1 | C | fishing |
+----+------------+-------+-------------+
我想找出一天内参加 2 项以上运动的所有人(姓名和运动),其中一项运动必须是“足球”。
所以结果应该是这样的,
+----+------+------+----------+
| ID | Date | Name | Sport |
+----+------+------+----------+
| 1 | 1 | A | football |
| 2 | 1 | A | soccer |
| 4 | 2 | B | tenis |
| 5 | 2 | B | football |
+----+------+------+----------+
我们不计算名字“C”,因为他不踢足球(即使他一天参加超过 2 项运动)。
我试试
SELECT * FROM player GROUP BY Date, Name HAVING count(Date) > 1;
但不会给我想要的。
PS:此帖不是重复帖。这些答案在Finding duplicate values in mysql 不会直接针对这个问题。这是查找具有重复值和条件的行。请删除“重复”标签,以便其他人可以从这个问题中受益。
【问题讨论】:
在发布问题之前搜索社区 - ***.com/questions/688549/… 我在发布之前阅读并搜索过。那些“分组依据”和“计数> 1)只将那些重复行组合在一起。但我想要的是显示那些重复行+运动必须是“足球”的要求 请帮忙,我似乎在任何地方都找不到类似的请求。谢谢! @r00k,这不是类似的帖子! Re 30:有些月份有 31 天。超过 2 项:您的示例数据和查询表明您关心 2 项或更多运动。 Re不会给我我想要的东西:你为什么不从踢足球的球员中分组等等?一天内参加 2 项以上运动的人(姓名和运动):您的意思是,在一个月的同一天参加 2 项以上运动的人的姓名和运动。 【参考方案1】:试试:
select
a.*
from tbl a
join (
select
date, name,
max(case when Sport = 'football' then 1 else 0 end) val
from tbl
group by date, name
having count(date) > 1
) b on a.date = b.date and a.name = b.name
where b.val = 1
演示 sqlfiddle
【讨论】:
伟大的工作普拉文。谢谢。你的代码又好又干净!【参考方案2】:您应该正在寻找这个:
表pl1
有匹配的player name
和date
谁玩过football
,pl2
包括计数,pl3
让您找到所有玩过football
的玩家以及更多游戏date 然后你从pl4
获取匹配的数据
SELECT
pl4.*
FROM
player pl4
JOIN
(SELECT
pl2.name, pl2.date, COUNT(pl2.name) numberofgames
FROM
player pl2
JOIN (SELECT
date, name
FROM
player
WHERE
sport = 'football') pl1 ON (pl2.name = pl1.name
AND pl2.date = pl1.date)
GROUP BY pl2.name , pl2.date
HAVING numberofgames > 1) pl3 ON (pl3.name = pl4.name
AND pl3.date = pl4.date)
【讨论】:
好答案兄弟。这不是我问的,但我很感激你的回答 非常感谢。这给了我我想要的。我有另一个后续问题,在哪里可以找到排除这些球员的列表(当天踢足球+其他比赛)***.com/questions/32721210 @TrungNguyen,看起来像你的作业。很高兴它奏效了!请接受答案。 @TrungNguyen,感谢您接受答案!以上是关于mysql:查找具有重复值和条件的行[重复]的主要内容,如果未能解决你的问题,请参考以下文章