有多个条件的查询计数帮助?

时间:2011-07-28 14:02:47

标签: mysql sql count

我对sql并不擅长,我尝试了很多不同的方法,无法提出可靠的解决方案。 基本上我有 enter image description here

我需要一个查询,它会告诉 nid 有多少个唯一的实例出现在 tid 的组合中。基本上使用两个或更多条件计数,并仅返回满足所有条件的行数。 tid 的组合可以超过2个或更多数字......这显然需要添加到查询中,这很好(我不希望一个接受数组的查询,如果这是有道理的) ......我只需要查询声音的逻辑。

我需要能够传递35&的 tid 。 45并接收“2”表示两个完整的匹配。 tid 35& 45都出现在 nid 4& 10,但由于 tid 45未出现在 nid 2中,因此不应计算它。我希望这是有道理的。

测试时:

26,27应回复“2”

35,27应回复“2”

31,35应该回复“1”

26,27,45应回复“1”

1 个答案:

答案 0 :(得分:3)

显示nid4 and 10

SELECT nid
FROM taxonomy_index
WHERE tid IN (35,45)               --- list of tid to check
GROUP BY nid
HAVING COUNT(DISTINCT tid) = 2     --- count of numbers in list

统计他们:

SELECT COUNT(*)
FROM
  ( SELECT nid
    FROM taxonomy_index
    WHERE tid IN (35,45)
    GROUP BY nid
    HAVING COUNT(DISTINCT tid) = 2
  ) AS grp

如果组合(nid,tid)是唯一的,则COUNT(DISTINCT tid)可以替换为COUNT(*)

另一种方式是:

SELECT COUNT(DISTINCT nid)
FROM taxonomy_index a
WHERE NOT EXISTS
      ( SELECT *
        FROM taxonomy_index b
        WHERE b.tid IN (35,45)
          AND NOT EXISTS
              ( SELECT *
                FROM taxonomy_index c
                WHERE c.tid = b.tid
                  AND c.nid = a.nid
              )
      )