0
votes

Passer un nom de table en tant que paramètre sur plusieurs sélectionneurs

J'ai une requête SQL qui résume les colonnes d'une table table_name code> (console de bigquery) le long des lignes:

Sélectionnez P>

(SELECT COUNT(*) FROM m WHERE B_col IS NULL) /
(SELECT COUNT(*) FROM m) * 100 AS B_something


1 commentaires

BigQuery ne vous permettra pas de paramétrer les noms de table, les noms de colonne, etc. Documénation .


3 Réponses :


2
votes

Je voudrais simplement utiliser l'agrégation conditionnelle:

with params as (
      select avg(case when a_col = 'Hello' then 100.0 else 0 end) as a_something,
             avg(case when b_col is null then 100.0 else 0 end) as b_something
      from m
     )
select . . .
from params cross join
     . . .


1 commentaires

D'autres réponses sont super également, mais c'est une réponse très slick! Merci!



1
votes

Vous pouvez utiliser un CTE (expression de table commune). Vous ne mentionnez pas quelle base de données vous utilisez. À titre d'exemple, la requête suivante fonctionnera dans PostgreSQL:

with
m as (
  select * from table_name
)
select
  (select count(*) from m where a_col = 'Hello') / 
  (select count(*) from m) * 100 as a_something,
  (select count(*) from m where b_col = 'Hello') / 
  (select count(*) from m) * 100 as b_something


0 commentaires

1
votes

pour BigQuery Standard SQL

SELECT 
  100 * COUNTIF(A_col = 'Hello') /  COUNT(*) AS A_something,
  100 * COUNTIF(B_col IS NULL) / COUNT(*)  AS B_something
FROM `table_name`


0 commentaires