如何在多个表中计数?

slsn1g29  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(240)

我在获取另一个表行上使用的id时遇到了一些问题。我有三张table。一是分类、文章、视频。在文章和视频中,有一个列具有类别id。例如:
表类别:

id | category_name
------------------
1  | News
2  | Sports
3  | Art
4  | Horror

表格项目:

id | category_id | title
----------------------------------
1  | 1           | title content 1
2  | 1           | title content 2
3  | 3           | title content 3
4  | 3           | title content 4
5  | 2           | title content 5

桌面视频:

id | category_id | video_title
------------------------------
1  | 1           | video title 1
2  | 2           | video title 2
3  | 3           | video title 3

我想得到每个类别id已经使用了其他两个数据库中的时间。这样地:

Category ID 1 is use 3 times
Category ID 2 is use 2 times
Category ID 3 is use 3 times
Category ID 4 is use 0 times

我需要使用什么查询才能得到所有这样的数据?拜托,谁知道谁能帮我。提前谢谢。

lyr7nygr

lyr7nygr1#

首先你需要
UNION ALL articles 表和 video 表必须是子查询,然后使用 Outer join 以及 COUNT 功能。

SELECT Concat('Category ID  ', c.id, ' is use ', Count(t.category_id ), ' times') 
FROM   categories c 
       LEFT JOIN (SELECT category_id 
                  FROM   articles 
                  UNION ALL 
                  SELECT category_id 
                  FROM   video) t 
              ON c.id = t.category_id 
GROUP  BY c.id

sqlfiddle:http://sqlfiddle.com/#!2012年9月9日
[结果]:

| Concat('Category ID  ', t.id, ' is use ', t.cnt, ' times') |
|------------------------------------------------------------|
|                              Category ID  1 is use 3 times |
|                              Category ID  2 is use 2 times |
|                              Category ID  3 is use 3 times |
|                              Category ID  4 is use 0 times |

笔记 COUNT 如果列值遇到 null 例如,这里有一个示例脚本。

CREATE TABLE T(
   col int
);

INSERT INTO T VALUES (NULL);
INSERT INTO T VALUES (1);

SELECT COUNT(col) FROM  t;  -- RESULT  = 1

SELECT COUNT(*) FROM  t;  --RESULT = 2

样品sqlfiddle:http://sqlfiddle.com/#!9/e2bba7/2号

qybjjes1

qybjjes12#

例如,您可以使用以下查询:

Select category_id, count(1) - 1
  From (
    Select category_id From video
    Union All Select category_id From articles
    Union All Select id From Categories)
  Group By category_id

相关问题