J'ai une requête SQL qui résume les colonnes d'une table Sélectionnez P> table_name code> (console de bigquery) le long des lignes:
(SELECT COUNT(*) FROM m WHERE B_col IS NULL) /
(SELECT COUNT(*) FROM m) * 100 AS B_something
3 Réponses :
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 . . .
D'autres réponses sont super également, mais c'est une réponse très slick! Merci!
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
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`
BigQuery ne vous permettra pas de paramétrer les noms de table, les noms de colonne, etc. Documénation a >.