mysql:查找具有重复值和条件的行

20 浏览
0 Comments

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日
0
0 Comments

尝试:

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

0
0 Comments

你应该找到以下内容:

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)

0