首页 > 解决方案 > 必需的 SQL 查询

问题描述

我已经坚持了一段时间了。

我有以下 SQL 表:

department桌子

Id  Name

 1  DeptA
 2  DeptB
 3  DeptC

users桌子

 Id   Name  Dept

 101  Alice 2
 102  Bob   3

alpha桌子

Id   Uid  Title

501  101  HELLO
502  102  HEY
503  101  SQL

beta桌子

Id   Uid  Title

601  101  HELLO1
602  101  HEY1
603  102  SQL1

解释:

我想要的结果:

DeptA DeptB DeptC

  0     4     2

我想要记录的计数alphabeta组合,按Dept这些表中记录的用户分组。

有人可以帮我处理 SQL 查询吗?

标签: mysqlsqldatabase

解决方案


根据您的表结构,我使用部门 ID 来检索结果,否则我使用部门名称。如果你得到 NULL,你也可以使用 COALESCE 函数

-- MySQL
SELECT SUM(CASE WHEN d.id = 1 THEN COALESCE(total, 0) END) dept_A
     , SUM(CASE WHEN d.id = 2 THEN COALESCE(total, 0) END) dept_B
     , SUM(CASE WHEN d.id = 3 THEN COALESCE(total, 0) END) dept_C
FROM department d
LEFT JOIN (SELECT u.dept
             , COUNT(1) total
        FROM users u
        INNER JOIN (SELECT uid
                    FROM alpha
                    UNION ALL
                    SELECT uid
                    FROM beta) t
                ON u.id = t.uid
        GROUP BY u.dept ) p
        ON d.id = p.dept;

请检查网址http://sqlfiddle.com/#!9/020b2/1


推荐阅读