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

时间:2012-06-14 17:31:41

标签: mysql sql select

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

我有3张桌子

TOPIC
VIDEO 
TOPIC_VIDEO

主题可以包含一个或两个视频。视频是否是样本视频。

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

TOPIC

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'选择记录 这是可能的,我怎么能做到这一点。 非常感谢你的时间

1 个答案:

答案 0 :(得分: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 

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 |