0
votes

comment renvoyer une valeur d'indicateur basée sur des données de table

J'ai une table "emp" comme suit dans BIG QUERY

 entrez la description de l'image ici

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

Merci! entrez la description de l'image ici


0 commentaires

3 Réponses :


0
votes

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;


0 commentaires

1
votes

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   


1 commentaires

Parfait merci beaucoup



0
votes

Cette échelle pourrait être un peu plus agréable ...

  • remplacez simplement bigquery-public-DATA par votre projet et austin_bikeshare par votre ensemble de données.

Pourquoi mieux?

  1. interroger __ TABLE __ n'est pas facturé donc gratuitement :-)
  2. Le compte distinct sur le hachage est légèrement plus rapide (utiliserait approx_count_distinct et round si des ensembles de données très volumineux)
  3. Votre indicateur donne un nombre compris entre 0 et 1 - indiquant l'échelle des doublons dans chaque tableau - cela peut être
  4. Passer en revue l'ensemble de données, ce que je suppose que vous ferez est trivial.

#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


0 commentaires