如何查找记录超过 3 的列数?
How to find the number of columns in which records are more than 3?
为了解决这个问题,我从 information_schema.columns 中获取列的名称并进行查询,该查询应该计算一列中的记录数。但是那个子查询 return 超过 1 个值,我不知道为什么,因为它应该 return 行数 - 一个值。请解释我做错了什么。
SELECT count(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'users' group by COLUMN_NAME having((select count(COLUMN_NAME) from users where COLUMN_NAME is not null)>3)
列
name | surname
__________________
a | b
c | d
e | f
e | null
函数应该return 1(名称列有4条记录)
您可以试试这个解决方案:
DECLARE dsql STRING;
DECLARE qry STRING;
SET qry = (
SELECT
STRING_AGG(ARRAY_TO_STRING(["SELECT '", column_name, "' AS ColumnName, " || "COUNT(" || column_name || ") AS RowCount FROM mydataset.", table_name, ' union all'], ''), ' ')
FROM
mydataset.INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = 'users' );
SET dsql = 'SELECT * FROM ( ' || SUBSTR(qry, 1, LENGTH(qry) - LENGTH(' union all')) || ') WHERE RowCount > 3';
EXECUTE IMMEDIATE dsql;
为了解决这个问题,我从 information_schema.columns 中获取列的名称并进行查询,该查询应该计算一列中的记录数。但是那个子查询 return 超过 1 个值,我不知道为什么,因为它应该 return 行数 - 一个值。请解释我做错了什么。
SELECT count(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'users' group by COLUMN_NAME having((select count(COLUMN_NAME) from users where COLUMN_NAME is not null)>3)
列
name | surname
__________________
a | b
c | d
e | f
e | null
函数应该return 1(名称列有4条记录)
您可以试试这个解决方案:
DECLARE dsql STRING;
DECLARE qry STRING;
SET qry = (
SELECT
STRING_AGG(ARRAY_TO_STRING(["SELECT '", column_name, "' AS ColumnName, " || "COUNT(" || column_name || ") AS RowCount FROM mydataset.", table_name, ' union all'], ''), ' ')
FROM
mydataset.INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = 'users' );
SET dsql = 'SELECT * FROM ( ' || SUBSTR(qry, 1, LENGTH(qry) - LENGTH(' union all')) || ') WHERE RowCount > 3';
EXECUTE IMMEDIATE dsql;