计算订阅所有杂志的订阅者(3种不同的杂志)

时间:2011-04-27 12:23:53

标签: sql oracle

SUBSCRIPTIONS (SUB_ID, MAG_ID, RENEW_DATE, CANCEL_DATE, PERIOD)

这是我尝试的但是我得到的是0

SELECT COUNT(DISTINCT SUB_ID)
FROM DVD_SUBSCRIPTIONS
WHERE MAG_ID = 1
AND MAG_ID = 2
AND MAG_ID = 3;


COUNT(DISTINCTSUB_ID)
 ---------------------
              0

帮助plzzz

2 个答案:

答案 0 :(得分:5)

以下内容应该有效,内部SELECT将返回已订阅所有3个杂志的订阅者:

SELECT COUNT(*) 
  FROM (SELECT sub_id, COUNT(distinct mag_id) 
          FROM dvd_subscriptions 
         WHERE mag_id IN (1, 2, 3) 
         GROUP BY sub_id
        HAVING COUNT(distinct mag_id) = 3)

答案 1 :(得分:1)

戴夫你不能那样使用AND,你能想到一个等于1且同时2和3的值吗?您应该使用IN子句,或者您可以使用OR,但是这个可以获取mag_id = 1mag_id = 2mag_id = 3的数据。如果您想要所有这些数据使用{Vincent'答案中的IN条款。

查看以下链接以了解详情:SQL-AND-ORSQL-INSQL-HAVING