SQL查询 - 根据计数条件选择记录

Gub*_*ooo 6 mysql sql select

标题可能看起来不太清楚 - 不知道如何在一行中解释问题.

我有3张桌子

TOPIC
VIDEO 
TOPIC_VIDEO

一个主题可以有一个或两个视频.视频是否是样本视频.

具有相关列名的表中的示例数据

话题

TOPIC_ID |         NAME          | COURSE_ID
    1    | Excel - Add/Subtract  |     1
    2    | Excel - sort          |     1
    3    | Excel - filter        |     1
    4    | Excel - formulas      |     1


VIDEO

VIDEO_ID | VIDEO_URL
    10   | www.youtube.com?v=123
    12   | www.youtube.com?v=345
    13   | www.youtube.com?v=567
    14   | www.youtube.com?v=879
    15   | www.youtube.com?v=443


TOPIC_VIDEO

TOPIC_VIDEO_ID | TOPIC_ID | VIDEO_ID | IS_SAMPLE    
      1        |    1    |    10    |    Y
      2        |    2    |    12    |    N
      3        |    3    |    13    |    N
      4        |    3    |    14    |    Y
      5        |    4    |    15    |    N

所以我要做的是为一个给定的课程选择所有主题及其相应的视频.现在,如果一个主题有多个视频 - 我想选择is_sample为"N"的视频.

与上面的示例一样 - topic_id 3有两个视频,其中video_id为13和14,因此应选择video_id 13.

这是我到目前为止的查询

select topic.*,count(topic.topic_id),video.video_id,topic_video.is_sample
from topic
left join topic_video ON topic_video.topic_id = topic.topic_id
left join video ON video.video_id = topic_video.video_id
where course_id=1
group by topic.topic_id

所以现在如果计数是2 - 我想用is_sample ='N'选择记录这是否可行,我该如何实现这一点.非常感谢你的时间

Con*_*rix 5

解决这个问题的一种方法是

  • 加入到按主题计算计数的内联视图.
  • 使用count创建仅加入IS_SAMPLE = N的case语句


SELECT * 
FROM   topic 
       LEFT JOIN (SELECT topic_id, 
                         Count(topic_id) t_count 
                  FROM   TOPIC_VIDEO 
                  GROUP  BY topic_id) t 
              ON topic.topic_id = t.topic_id 
       LEFT JOIN topic_video 
              ON topic_video.topic_id = topic.topic_id 
                 AND TOPIC_VIDEO.IS_SAMPLE = CASE 
                                               WHEN t.t_count = 2 THEN 'N' 
                                               ELSE TOPIC_VIDEO.IS_SAMPLE 
                                             END 
       LEFT JOIN video 
              ON video.video_id = topic_video.video_id 
Run Code Online (Sandbox Code Playgroud)

DEMO

产量

| TOPIC_ID |                 NAME | COURSE_ID | T_COUNT | TOPIC_VIDEO_ID | VIDEO_ID | IS_SAMPLE |             VIDEO_URL |
-------------------------------------------------------------------------------------------------------------------------
|        1 | Excel - Add/Subtract |         1 |       1 |              1 |       10 |         Y | www.youtube.com?v=123 |
|        2 |         Excel - sort |         1 |       1 |              2 |       12 |         N | www.youtube.com?v=345 |
|        3 |       Excel - filter |         1 |       2 |              3 |       13 |         N | www.youtube.com?v=567 |
|        4 |     Excel - formulas |         1 |       1 |              5 |       15 |         N | www.youtube.com?v=443 |
Run Code Online (Sandbox Code Playgroud)

  • @Gublooo我很高兴.BTW您的表格格式使用SQLFiddle的`Text To DDL`功能变得轻而易举.感谢那. (2认同)