1

mysqlテーブルに「X_」で始まる名前の列がたくさんあります(例:X_N、X_Pad、X_Serverなど)。現在、これらの列はnullになる可能性があります。

'X_'で始まる列が最もNULLではないかどうかを調べたいです。

4

3 に答える 3

3

COUNT(expr)

SELECTステートメントによって取得された行のexprのNULL以外の値の数のカウントを返します。

次のクエリは、各列のnull以外のカウントを返します。

SELECT
COUNT(*)     AS Total,
COUNT(X_N)   AS NNC_N,
COUNT(X_Pad) AS NNC_Pad
FROM table;

このクエリを使用して、テーブルから一致する列のリストを取得できます。

SELECT COLUMN_NAME
FROM  INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = '<database_name>'
AND   TABLE_NAME = '<table_name>'
AND   COLUMN_NAME LIKE 'x\_%';

-- Output:
-- X_N
-- X_Pad
-- X_Server

このクエリを使用して、クエリを作成できます。

SELECT CONCAT('SELECT ', GROUP_CONCAT('COUNT(`', COLUMN_NAME, '`) AS `NNC of ', COLUMN_NAME, '`'), ' FROM `', TABLE_NAME, '`')
FROM  INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = '<database_name>'
AND   TABLE_NAME = '<table_name>'
AND   COLUMN_NAME LIKE 'x\_%';

-- Output (added whitespace for readability):
-- SELECT
-- COUNT(`X_N`)      AS `NNC of X_N`,
-- COUNT(`X_Pad`)    AS `NNC of X_Pad`,
-- COUNT(`X_Server`) AS `NNC of X_Server`
-- FROM `<table_name>`

代わりの:

SELECT GROUP_CONCAT('SELECT \'', COLUMN_NAME, '\' AS `Col`, COUNT(`', COLUMN_NAME , '`) AS `NNC` FROM `', TABLE_NAME , '`' SEPARATOR ' UNION ALL ')
FROM  INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = '<database_name>'
AND   TABLE_NAME = '<table_name>'
AND   COLUMN_NAME LIKE 'x\_%';

-- Output (added whitespace for readability):
-- SELECT 'X_N'      AS `Col`, COUNT(`X_N`)      AS `NNC` FROM `<table_name>` UNION ALL 
-- SELECT 'X_Pad'    AS `Col`, COUNT(`X_Pad`)    AS `NNC` FROM `<table_name>` UNION ALL 
-- SELECT 'X_Server' AS `Col`, COUNT(`X_Server`) AS `NNC` FROM `<table_name>`
于 2013-01-23T08:50:10.863 に答える
1

db.tblからcount(X_N)、count(X_Pad)、count(X_Server)を選択します。

大丈夫です。

このSQLを生成するためのメソッドが必要な場合は、次を使用できます。

SELECT CONCAT("select ", GROUP_CONCAT("count(",column_name, ")"), " from ", table_schema, '.', table_name)
FROM information_schema.columns
WHERE table_schema='db' AND table_name='tbl' AND column_name LIKE 'X\_%';
于 2013-01-23T09:21:58.223 に答える
0

もしかしてこういうこと?(未テスト)

SELECT 
(SELECT COUNT(id) FROM My_Table WHERE X_1 != NULL) as x1,
(SELECT COUNT(id) FROM My_Table WHERE X_2 != NULL) as x2,
(SELECT COUNT(id) FROM My_Table WHERE X_3 != NULL) as x3,
(SELECT COUNT(id) FROM My_Table WHERE X_4 != NULL) as x4;
于 2013-01-23T08:45:49.507 に答える