Compte tenu de la table Je souhaite sélectionner le nom et l'identifiant, des lignes où le nom est unique (on n'apparaît qu'une seule fois) p> Ceci est essentiellement identique comme Comment sélectionner des valeurs uniques d'une colonne de la table? , mais remarquez que l'auteur n'a pas besoin de l'identifiant, de sorte que ce problème peut être résolu par un groupe Cependant, j'ai besoin d'extraire toute la ligne (pourrait être des dizaines ou des centaines de colonnes), y compris l'ID. , où EDIT: p> suis à l'aide de Google BigQuery. P> Résultats attendus: P> par nom comptant (nom) = 1 code> p>
compte (nom) = 1 code>, mais je ne peux pas
groupe par ID, nom code> comme chaque combinaison de ceux-ci sont uniques. p>
| id | Name |
| 02 | Chad |
| 04 | Tim |
8 Réponses :
Utilisation existe et vérifiez le nom UQIQUE
select id,name from table t1 where exists ( select 1 from table t2 where t1.name=t2.name having count(*)=1 )
Utilisez sous-requête corrélée
sortie: p>
C'est juste au-delà de ma compréhension qui me baisse sans même comprendre la réponse - si vous pensez avoir assez de connaissances - expliquez-moi
Je n'ai pas voté votre réponse, mais j'ai remarqué que dans votre sortie Tim n'est pas mentionné. Peut-être que vous avez oublié (éditer: écrire) lui?
@Czarek, avez-vous vérifié la démo - allez-y ajouter une autre rangée pour TIM - ça viendra
Si vous mettez à jour votre message pour inclure toutes les lignes du violon et du même code dans votre exemple en tant que violon, je vais marquer ceci comme accepté.
S'il vous plaît essayez ceci.
SELECT DISTINCT id,NAME FROM tableName
Cela me donnera chaque combinaison distincte de ID code> et
nom code>.
Vous pouvez utiliser plusieurs sous-candidats pour extraire ce dont vous avez besoin.
Vous pouvez utiliser ceci nécessiterait index sur la table n'existe pas code>:
(ID, nom) code> pour produire un ensemble de résultats plus rapide . p> p>
Faites simplement un groupe par code>. Utilisez
avoir code> pour vous assurer qu'un nom n'est là qu'une seule fois. Utilisez
min () code> pour choisir le seul identifiant pour le nom.
select min(id), name
from tablename
group by name
having count(*) = 1
Que diriez-vous d'une simple agrégation?
select any_value(id), name from t group by name having count(*) = 1;
ci-dessous est pour BigQuery Standard SQL et fonctionne pour un nombre quelconque de colonnes sans les appeler explicitement et ne nécessite aucune solution ou sous-sélectionnant
#standardSQL SELECT t.* FROM ( SELECT ANY_VALUE(t) t FROM `project.dataset.table` t GROUP BY name HAVING COUNT(1) = 1 )
"SQL" est juste une langue, pas un produit réel. S'il vous plaît dites-nous quelle version i> de SQL que vous utilisez (E.G. MySQL, SQL Server, Oracle, Postgres, etc.).
C'est toujours une bonne idée de spécifier également le résultat attendu, même lorsque vous le trouvez évident.
Merci pour vos commentaires, j'ai mis à jour la question avec SQL-Version et les résultats attendus.