簡體   English   中英

在單個查詢中為表中的所有列計算列中的不同值

[英]count distinct values in column for all columns in a tables in single query

一種快速有效地計算表中所有列的列中不同值的方法。 在單個查詢中

請注意

  1. 我有只讀訪問權限。
  2. 在單個模式中,我有多個表,我想計算一些表但不是全部
  1. 您可以使用此查詢來計算單列的不同值。(請參閱查詢 1)
  2. 對於多列,您必須使用 union all。(請參閱查詢 2)

查詢 1 - 按 Your_ColumnName 從 Your_TableName 組中選擇不同的 Your_ColumnName, count(*)

查詢 2 - 選擇不同的 Your_ColumnName1, count( ) from Your_TableName group by Your_ColumnName1 union all Select distinct Your_ColumnName2, count( ) from Your_TableName group by Your_ColumnName2

我假設最困難的情況 - 當您不能依賴表名的子字符串時。

在這種情況下 - 創建您的架構/表列表,並使用它來創建一個腳本來構建一個大腳本,一旦它生成,您就可以最終啟動它:

CREATE LOCAL TEMPORARY TABLE srch(table_schema,table_name) 
ON COMMIT PRESERVE ROWS AS
          SELECT 'public','gen_sample'
UNION ALL SELECT 'public','d_product'
UNION ALL SELECT 'dbadmin','d_cust_scd'
UNION ALL SELECT 'dbadmin','currencies'
;

SELECT
    CASE ROW_NUMBER() OVER(ORDER BY c.table_schema,c.table_name,ordinal_position)
    WHEN 1 THEN ''
    ELSE 'UNION ALL '
    END
  ||'SELECT '''||c.table_schema||'.'||c.table_name||'.'||column_name||''','
  ||'COUNT(DISTINCT '||column_name||') FROM '||c.table_schema||'.'||c.table_name
FROM columns c JOIN srch USING(table_schema,table_name);

-- out  SELECT 'dbadmin.currencies.id',COUNT(DISTINCT id) FROM dbadmin.currencies
-- out  UNION ALL SELECT 'dbadmin.currencies.nm',COUNT(DISTINCT nm) FROM dbadmin.currencies
-- out  UNION ALL SELECT 'dbadmin.currencies.sgn',COUNT(DISTINCT sgn) FROM dbadmin.currencies
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_key',COUNT(DISTINCT cust_key) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_id',COUNT(DISTINCT cust_id) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_from_dt',COUNT(DISTINCT cust_from_dt) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_to_dt',COUNT(DISTINCT cust_to_dt) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_is_curr',COUNT(DISTINCT cust_is_curr) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_cre_ts',COUNT(DISTINCT cust_cre_ts) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_udt_ts',COUNT(DISTINCT cust_udt_ts) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_fname',COUNT(DISTINCT cust_fname) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_lname',COUNT(DISTINCT cust_lname) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_phoneno',COUNT(DISTINCT cust_phoneno) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_loy_lvl',COUNT(DISTINCT cust_loy_lvl) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'dbadmin.d_cust_scd.cust_org_id',COUNT(DISTINCT cust_org_id) FROM dbadmin.d_cust_scd
-- out  UNION ALL SELECT 'public.d_product.prdkey',COUNT(DISTINCT prdkey) FROM public.d_product
-- out  UNION ALL SELECT 'public.d_product.prdid',COUNT(DISTINCT prdid) FROM public.d_product
-- out  UNION ALL SELECT 'public.d_product.start_date',COUNT(DISTINCT start_date) FROM public.d_product
-- out  UNION ALL SELECT 'public.d_product.end_date',COUNT(DISTINCT end_date) FROM public.d_product
-- out  UNION ALL SELECT 'public.d_product.price',COUNT(DISTINCT price) FROM public.d_product
-- out  UNION ALL SELECT 'public.gen_sample.srr_key',COUNT(DISTINCT srr_key) FROM public.gen_sample
-- out  UNION ALL SELECT 'public.gen_sample.seq',COUNT(DISTINCT seq) FROM public.gen_sample
-- out  UNION ALL SELECT 'public.gen_sample.nucleotide',COUNT(DISTINCT nucleotide) FROM public.gen_sample
-- out  UNION ALL SELECT 'public.gen_sample.quality',COUNT(DISTINCT quality) FROM public.gen_sample

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM