Mysql SQL按列搜索';s内容,并让列名位于结果表的第一列
如果我有一个表,并希望搜索每个列的内容:Mysql SQL按列搜索';s内容,并让列名位于结果表的第一列,mysql,sql,count,Mysql,Sql,Count,如果我有一个表,并希望搜索每个列的内容: name col1 col2 data1 1 10 data2 2 20 data3 na 30 data4 4 na data5 5 na ... ... ... 我想得到如下表格: col_name na not_na col1 1 4 col2 2 3 有什么方法可以做到这一点吗? 首
name col1 col2
data1 1 10
data2 2 20
data3 na 30
data4 4 na
data5 5 na
... ... ...
我想得到如下表格:
col_name na not_na
col1 1 4
col2 2 3
有什么方法可以做到这一点吗?
首先谢谢 你可以做一个联盟
(
SELECT 'col1' as col_name,
(SELECT COUNT(`name`) FROM `table` WHERE `col1` = 'na') as na,
(SELECT COUNT(`name`) FROM `table` WHERE `col1` != 'na') as not_na
)
UNION
(
SELECT 'col2' as col_name,
(SELECT COUNT(`name`) FROM `table` WHERE `col2` = 'na') as na,
(SELECT COUNT(`name`) FROM `table` WHERE `col2` != 'na') as not_na
)
最简单的方法是构造一个
union all
查询:
select 'col1' as column, sum(col1 = 'na') as na,
sum(col1 is distinct from 'na') as not_na
from t
union all
select 'col2' as column, sum(col2 = 'na') as na,
sum(col2 is distinct from 'na') as not_na
from t;
如果有很多列,则可以使用元数据表上的查询(
信息_SCHEMA
)或电子表格来构造此类查询。使用包含If:
SELECT
'col1' as `col_name`,
SUM(IF(`col1` = 'na',1,0)) as `na`,
SUM(IF(`col1` = 'na',0,1)) as `not_na`
FROM `table`
UNION
SELECT
'col2' as `col_name`,
SUM(IF(`col2` = 'na',1,0)) as `na`,
SUM(IF(`col2` = 'na',0,1)) as `not_na`
FROM `table`;
我不太明白你的意思。。输入是如何转换的?@Teja看起来输出是具有该值的行的计数。我弄乱并编辑了你的答案,而不是添加我自己的答案。请原谅我的错误,把你的答案放回原处。我道歉@懒汉。没有造成伤害。我以前也这么做过。