Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL按列搜索';s内容,并让列名位于结果表的第一列_Mysql_Sql_Count - Fatal编程技术网

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看起来输出是具有该值的行的计数。我弄乱并编辑了你的答案,而不是添加我自己的答案。请原谅我的错误,把你的答案放回原处。我道歉@懒汉。没有造成伤害。我以前也这么做过。