如何查找 mysql table 中的用户数?
How to find no of users in mysql table?
我有 table 如下所示
A B C D
part1 p NA NA
part2 NA NA p
Part3 p p NA
我必须创建 table 第 1 部分用户、第 2 部分用户和第 3 部分用户。 p代表用户。
我已经为第 1 部分用户进行了如下尝试,但将所有第 1 部分、第 2 部分和第 3 部分用户都作为 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
我对第 2 部分和第 3 部分用户应用了相同的逻辑,但我得到了相同的输出。
期望的输出:
no_of_part1_users no_of_part2_users no_of_part3_users
1 1 2
要生成您想要的结果,您可以使用 FROM
-less SELECT
和每个计数的子查询。每个子查询都使用派生的 table,使用 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;
但是,是的,这很丑陋。你的设计确实很糟糕。你应该真正解决这个问题。关系 table 不是电子表格!
我有 table 如下所示
A B C D
part1 p NA NA
part2 NA NA p
Part3 p p NA
我必须创建 table 第 1 部分用户、第 2 部分用户和第 3 部分用户。 p代表用户。
我已经为第 1 部分用户进行了如下尝试,但将所有第 1 部分、第 2 部分和第 3 部分用户都作为 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
我对第 2 部分和第 3 部分用户应用了相同的逻辑,但我得到了相同的输出。
期望的输出:
no_of_part1_users no_of_part2_users no_of_part3_users
1 1 2
要生成您想要的结果,您可以使用 FROM
-less SELECT
和每个计数的子查询。每个子查询都使用派生的 table,使用 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;
但是,是的,这很丑陋。你的设计确实很糟糕。你应该真正解决这个问题。关系 table 不是电子表格!