,如果我有一個表,並希望在每列的內容進行搜索: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
有沒有辦法做到這一點? 先謝謝!
,如果我有一個表,並希望在每列的內容進行搜索: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
有沒有辦法做到這一點? 先謝謝!
最簡單的方法是建立一個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
)查詢構造這樣的查詢或電子表格。
我搞砸了,編輯你的答案,而不是添加我自己的。請原諒我的錯誤,並將您的答案重新輸入。我的歉意! –
@SloanThrasher。 。 。沒有傷害完成。我在我之前完成了。 –
你可以做一個聯盟。
(
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
)
使用含有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`;
我不知道你這個輸出。如何在輸入得到轉化? – Teja
@Teja看起來像輸出是具有該值的行數 –