如何在mysql表中查找用户数?

如何在mysql表中查找用户数?,mysql,where-clause,case-when,Mysql,Where Clause,Case When,我有下面这样的桌子 A B C D part1 p NA NA part2 NA NA p Part3 p p NA 我必须创建包含part1用户、part2用户和part3用户的表。p代表用户 我为part1用户尝试了下面的方法,但将所有part1、part2和part3用户都设置为1 SELECT count(distinct A) as no_of_part1_users FROM table1 W

我有下面这样的桌子

A       B    C    D 
part1   p    NA   NA
part2   NA   NA    p
Part3   p     p    NA
我必须创建包含part1用户、part2用户和part3用户的表。p代表用户

我为part1用户尝试了下面的方法,但将所有part1、part2和part3用户都设置为1

SELECT count(distinct A) as no_of_part1_users 
    FROM table1
    WHERE (A="part1" AND B="x") OR (A="part1" AND C="x") OR (A="part1" AND D="x");
我得到如下输出:

no_of_part1_users
1
我已经为part2和part3用户应用了相同的逻辑,但是我得到了相同的输出

期望输出:

no_of_part1_users   no_of_part2_users no_of_part3_users
1                        1                 2

要生成所需内容,可以使用FROM less SELECT,并对每个计数使用子查询。每个子查询使用一个派生表,该派生表使用UNION ALL将列转换为行。然后可以对其进行过滤并进行计数

SELECT (SELECT count(*)
               FROM (SELECT b u
                            FROM table1
                            WHERE a = 'part1'
                     UNION ALL
                     ...
                     UNION ALL
                     SELECT d u
                            FROM table1
                            WHERE a = 'part1') x
               WHERE u <> 'NA') no_of_part1_users,
       ...
       (SELECT count(*)
               FROM (SELECT b u
                            FROM table1
                            WHERE a = 'part3'
                     UNION ALL
                     ...
                     UNION ALL
                     SELECT d u
                            FROM table1
                            WHERE a = 'part3') x
               WHERE u <> 'NA') no_of_part3_users;

但是是的,那很难看。你的设计真的很糟糕。你真的应该解决这个问题。关系表不是电子表格

如果您真的打算经常执行此查询,您可能应该将表设计更改为只包含一列。我已尝试透视表,但未成功完成。pivot不在mysqlYep中,这类问题高度暗示架构设计不佳。好的。我将修复我的表。