gpt4 book ai didi

python - 统计MySQL中每张表每列非空值的个数

转载 作者:行者123 更新时间:2023-11-28 17:08:12 26 4
gpt4 key购买 nike

有没有一种方法可以使用 SQL 为给定数据库中的所有表(使用 MySQL)生成此输出,而无需指定各个表名和列?

Table   Column  Count
---- ---- ----
Table1 Col1 0
Table1 Col2 100
Table1 Col3 0
Table1 Col4 67
Table1 Col5 0
Table2 Col1 30
Table2 Col2 0
Table2 Col3 2
... ... ...

目的是根据列中包含的数据量(大量列为空)来识别要分析的列。

使用 python 的“解决方法”解决方案(一次一张表):

    # Libraries
import pymysql
import pandas as pd
import pymysql.cursors

# Connect to mariaDB
connection = pymysql.connect(host='localhost',
user='root',
password='my_password',
db='my_database',
charset='latin1',
cursorclass=pymysql.cursors.DictCursor)


# Get column metadata
sql = """SELECT *
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='my_database'
"""
with connection.cursor() as cursor:
cursor.execute(sql)
result = cursor.fetchall()

# Store in dataframe
df = pd.DataFrame(result)
df = df[['TABLE_NAME', 'COLUMN_NAME']]

# Build SQL string (one table at a time for now)
my_table = 'my_table'
df_my_table = df[df.TABLE_NAME==my_table].copy()
cols = list(df_my_table.COLUMN_NAME)
col_strings = [''.join(['COUNT(', x, ') AS ', x, ', ']) for x in cols]
col_strings[-1] = col_strings[-1].replace(',','')
sql = ''.join(['SELECT '] + col_strings + ['FROM ', my_table])

# Execute
with connection.cursor() as cursor:
cursor.execute(sql)
result = cursor.fetchall()

结果是列名和计数的字典。

最佳答案

基本上,没有。另见 this answer .

另请注意,与上述答案最接近的实际上是您已经在使用的方法,但在反射 SQL 中实现效率较低。

我会像你一样做 - 构建一个类似的 SQL

SELECT
COUNT(*) AS `count`,
SUM(IF(columnName1 IS NULL,1,0)) AS columnName1,
...
SUM(IF(columnNameN IS NULL,1,0)) AS columnNameN
FROM tableName;

使用 information_schema 作为表名和列名的来源,然后对 MySQL 中的每个表执行它,然后将返回的单行分解为 N 个元组条目(tableName、columnName、total、nulls)。

关于python - 统计MySQL中每张表每列非空值的个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49643578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com