mysql:查找具有重复值和条件的行
mysql:查找具有重复值和条件的行
这个问题已经有了答案:
我有一个名为 \"player\" 的表格,其结构如下:
- ID是主键
- date = 他们玩的日期(只有1个月的时间,所以可能是1到30之间的一个数)
- Name = 球员的名字
- 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:这篇文章不是一个重复的问题。那些在在 MySQL 中查找重复值中的答案不会直接针对这个问题。这是为了在特定条件下查找重复值的行,请移除“重复”标签,以便其他人受益。
admin 更改状态以发布 2023年5月23日
尝试:
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
Demo sqlfiddle
你应该找到以下内容:
表pl1
匹配包含球员名称
和日期
的足球比赛记录,pl2
包含计数,pl3
获取所有在某个日期上的足球比赛及更多比赛的球员,然后从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)