mysql:查找重复值加条件

时间:2015-09-22 01:24:46

标签: mysql

我有一个表“玩家”如下 哪里: ID是主键。

  • 日期=他们玩的日期(仅1个月,因此可以从1到30)
  • 姓名=球员姓名
  • 体育=他们玩的运动,名单上可以有很多运动;但我只专注于“足球”一个

这是表格

+----+------------+-------+-------------+
| 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中的答案 不会直接针对这个问题。这是找到具有重复值和条件的行。请删除“重复”标记,以便其他人可以从此问题中受益。

2 个答案:

答案 0 :(得分:3)

你应该寻找这个:

表格pl1已匹配player namedate已玩footballpl2包含计数,pl3可让您获得所有这些玩家谁在特定日期玩了football个以及更多游戏,然后从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)

答案 1 :(得分:2)

尝试:

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