J'ai une table "emp" comme suit dans BIG QUERY
Si nous groupons par toutes les colonnes ou par enregistrements distincts, nous obtiendrons 3 comme nombre, si nous comptons (*), cela donnera 4
J'ai besoin d'écrire une requête qui doit renvoyer "1", si les enregistrements distincts et les valeurs de count (*) ne sont pas égaux (3! = 4 dans notre cas) sinon "0" comme indicateur comme ci-dessous p >
3 Réponses :
Si vous voulez trouver des doublons, vous pouvez utiliser:
select exists (select 1 from t group by empno, empname, deptno having count(*) > 1 ) as flag
Vous pouvez ensuite l'incorporer dans une requête pour renvoyer un indicateur si vous le souhaitez:
select empno, empname, deptno from t group by empno, empname, deptno having count(*) > 1;
Ci-dessous, pour BigQuery Standard SQL
Row flag 1 1
s'il faut appliquer aux exemples de données de votre question - le résultat est
#standardSQL SELECT IF(COUNT(*) = COUNT(DISTINCT FORMAT('%t', t)), 0, 1) AS flag FROM `project.dataset.emp` t
Parfait merci beaucoup
Cette échelle pourrait être un peu plus agréable ...
Pourquoi mieux?
#standard sql:
Table_Name dup_ratio your_flag bikeshare_stations 0.0104 0 bikeshare_trips 1.0 1
Résultat:
select b.table_id Table_Name ,round(safe_divide(count(distinct(FARM_FINGERPRINT(FORMAT('%T', a)))) , row_count),4) dup_ratio ,cast( trunc(safe_divide(count(distinct(FARM_FINGERPRINT(FORMAT('%T', a)))) , row_count)) as INT64) your_flag from `bigquery-public-data.austin_bikeshare.*` a inner join bigquery-public-data.austin_bikeshare.__TABLES__ b on a._TABLE_SUFFIX = b.table_id group by table_id ,row_count