0
votes

Groupe SQL par et calcul

Je suis nouveau à SQL et j'essaie de créer des questions sur DBeaver. J'ai quelques questions concernant l'agrégation en utilisant le groupe par. J'utiliserai un exemple de table de sortie à expliquer (c'est la sortie en exécutant ma requête): xxx

donc ici, j'ai utilisé l'instruction pour sélectionner Sample 1, puis en fonction du groupe par Sous-type, je peux récupérer différentes informations à partir de l'échantillon 1 (sur la base du sous-type, certaines données seront nuls comme indiqué dans la table en raison de la raison pour laquelle certaines données sont uniquement disponibles pour A ou B).

maintenant La première difficulté pour moi: je veux créer une nouvelle colonne "Données 5" pour la partie B et la formule utilisera 20 à partir de la colonne Data 1, 15 Données 2 Colonne et 21 de la colonne Data 3 - Ie 20 / (21-15 ). Est-ce possible pour effectuer une nouvelle sortie en fonction des résultats de la sortie? J'espère que je ne vous confonds pas ici.

Deuxième difficulté pour moi: Initialement, je veux faire une table d'une rangée pour l'échantillon 1. Donc, fondamentalement, je ne veux pas grouper par sous-type et juste montrer Data 1 - Data 4 colonnes. Toutefois, ma requête a une affaire et la fin en tant que déclarations qui recherchent des mots-clés dans la colonne de sous-type pour récupérer des informations. Par conséquent, cela me force à utiliser le groupe par sous-type (je suppose ??). Je ne sais pas quoi faire. Y a-t-il un moyen de rendre cela simple? Je veux faire quelque chose comme ceci: xxx

Si mes questions sont déroutantes, je peux coller ma requête réelle ici et les résultats de sortie afin que vous puissiez mieux comprendre.

merci pour votre aide !!!!

Entrez la description de l'image ici

sql

7 commentaires

Serait utile de voir vos requêtes


S'il vous plaît poster vos données d'échantillonnage. Je soupçonne que vous recherchez des CTES (expressions de table communes).


@OldProgrammer La requête est attachée comme une image


@CDDT La requête est attachée comme une image


Comme vous pouvez le voir, je veux corriger la syntaxe pour avg_cluster_spacing, ce qui ne va pas ici (cela ne me permet pas d'écrire la syntaxe correcte). Selon la sortie, avg_cluster_spacing doit être égal à 251,82 / (63/10) = 39,97. C'est la valeur que je veux au lieu de 25.182. La formule pour avg_cluster_scaçage doit être avg_stage_scaçage / (perf_count / stay_count). Cependant, je ne sais pas comment écrire la syntaxe puisque SQL dira qu'ils n'existent pas. Je ne peux pas tout fusionner en une rangée en raison de la croissance limitée par achèvement_type.


Je suppose que c'est assez difficile ici car SQL prend des données de 2 types d'achèvement différents pour le même UWI pour calculer mes valeurs souhaitées (ai-je besoin d'une instruction SELECT ou de quelque chose imbriqué?). En bref, j'ai besoin d'une syntaxe pour effectuer ce qui suit: une fois terminé_type = "frac", calculez A et B; lorsque terminé_type = "jetperf", calculez C; Calculez ensuite A / (C / B) et enregistrer sous AVG_CLUSTER_SPACING comme nouvelle colonne.


S'il vous plaît voir ma réponse pour un exemple avec CTES. PS Dans l'avenir, veuillez coller votre code comme texte, pas comme une image.


3 Réponses :


0
votes

Vous pouvez essayer le ci-dessous -

select id, max(data1) as data1,max(data2) as data2,max(data3) as data3,max(data4) as data4
from tablename
group by id


1 commentaires

Merci. S'il vous plaît aussi voir ma requête ci-jointe!



0
votes

Essayez cette requête:

select id, max(data1) as data1,max(data2) as data2,max(data3) as data3,max(data4) as data4
from tablename group by SubType


1 commentaires

Merci. S'il vous plaît aussi voir ma requête ci-jointe!



1
votes

Calculez d'abord les résumés de terminal_type = 'frac' code> et pour terminal_type = 'jetperf' code> dans des CTES séparées. Ensuite, combinez-les comme suit:

;WITH frac as (
SELECT
 c.uwi,
 AVG(c.base_depth - c.top_depth) AS Avg_stage_Spacing,
 COUNT(c.completion_type) AS Stage_Count
FROM
 well_completion AS c
WHERE
 c.completion_type = 'FRAC'
GROUP BY
 c.uwi
), 
jetperf as (
SELECT
 c.uwi,
 COUNT(c.completion_type) AS Perf_Count
FROM
 well_completion AS c
WHERE
 c.completion_type = 'JETPERF'
GROUP BY
 c.uwi
)
SELECT
 f.uwi,
 f.Avg_stage_Spacing / (j.Perf_count / f.Stage_Count) AS Avg_cluster_spacing
FROM
 frac as f
  INNER JOIN
 jetperf as j
  ON
   f.uwi = j.uwi


3 commentaires

@Goldensun Si j'ai répondu à votre question, veuillez l'accepter comme la bonne réponse. Si cela ne répond pas à votre question, veuillez fournir plus d'informations.


J'ai accepté votre réponse comme la bonne réponse. Y a-t-il autre chose que je dois faire? S'il-te-plaît apprend-moi.


@Goldensun Bienvenue à Stackoverflow. Je vous suggère de prendre le Stackoverflow Tour . Après cela, vous pouvez lire des pages utiles dans le centre d'aide , telle que Comment puis-je poser une bonne question?