2017-04-14 21 views
0

,如果我有一個表,並希望在每列的內容進行搜索:SQL搜索,讓列名在結果表第一列

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 

有沒有辦法做到這一點? 先謝謝!

+0

我不知道你這個輸出。如何在輸入得到轉化? – Teja

+0

@Teja看起來像輸出是具有該值的行數 –

回答

0

最簡單的方法是建立一個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; 

如果你有大量的列,您也可以利用元數據表(INFORMATION_SCHEMA)查詢構造這樣的查詢或電子表格。

+0

我搞砸了,編輯你的答案,而不是添加我自己的。請原諒我的錯誤,並將您的答案重新輸入。我的歉意! –

+0

@SloanThrasher。 。 。沒有傷害完成。我在我之前完成了。 –

0

你可以做一個聯盟。

(
    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 
) 
0

使用含有IF簡單的SUM函數:

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`;