如何在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中,这类问题高度暗示架构设计不佳。好的。我将修复我的表。