我想显示一个输出表,该表计算表中找到的所有用户。 基本上我希望输出看起来像:
+-----------+-----------+
| user1 | user2 |
+-----------+-----------+
| 5 | 2 |
+-----------+-----------+
我只是使用虚拟表来测试它。我的查询如下:
(
select
name as user1
from
users
where
name = 'root'
) UNION (
select
name as user2
from
users
where
name = 'not_root'
)
只输出这样的内容:
+-----------+
| user1 |
+-----------+
| 5 |
| 2 |
+-----------+
答案 0 :(得分:1)
试试这个
SELECT
SUM(CASE WHEN Name = 'root' THEN 1 ELSE 0 END) user1,
SUM(CASE WHEN Name = 'not_root' THEN 1 ELSE 0 END) user2
FROM Users
答案 1 :(得分:0)
您可以在case
内使用count
语句在单独的列中获取计数
select
count(case when name = 'root' then 1 end) user1,
count(case when name = 'not_root' then 1 end) user2
from users
where name in ('root','not_root')
答案 2 :(得分:0)
<强> EDITED 强>
该方法的主要思想是将表视为子查询中的两个不同的虚拟表。我们可以制作嵌套的select语句,例如(select count(*) as c from users where name = 'root') u1
MySql将其视为名为u1
的特定表,其中一行和一列名为c
。
select u1.c as root_cnt, u2.c as not_root_cnt
from (select count(*) as c from users where name = 'root') u1,
(select count(*) as c from users where name = 'not_root') u2
或
此外,如果你有只返回一行的select语句,你可以直接在字段列表中放置嵌套选择
select (select count(*) as c from users where name = 'root') as root_cnt, (select count(*) as c from users where name = 'not_root') as not_root_cnt
这种方法的明显缺点是它的额外子查询。基于使用case when
构造的方法没有这种缺点。
答案 3 :(得分:0)
看来你的查询错了..
union不会按照您上面描述的方式组合两个查询的结果。
union会合并两个或多个select语句的结果,但不会“加入”它。
您可能希望为此原因使用联接。仍然你不能把5 | 2放在同一行,因为它基本上建议 - &gt;获取一个特定类型的用户1和用户2值