SQL unterscheidet sich für 2 Felder in einer Datenbank

84

Können Sie die unterschiedliche Kombination von 2 verschiedenen Feldern in einer Datenbanktabelle erhalten? Wenn ja, können Sie das SQL-Beispiel bereitstellen.

Leora
quelle

Antworten:

128

Wie wäre es einfach:

select distinct c1, c2 from t

oder

select c1, c2, count(*)
from t
group by c1, c2
Howard Pinsley
quelle
Abhängig von den Daten ist die Gruppierung nach langsamer als eindeutig
Noizer
5
Für diejenigen, die Operand should contain 1 column(s)Fehler sehen, besteht Ihr Problem darin, dass Sie dies wahrscheinlich tun select distinct(c1, c2) from tund hier keine Klammern zulässig sind. So bin ich hierher gekommen.
BookOfGreg
16

Wenn Sie unterschiedliche Werte von nur zwei Feldern wünschen und andere Felder mit diesen zurückgeben möchten, müssen die anderen Felder eine Art Aggregation aufweisen (Summe, Min, Max usw.), und die beiden Spalten, die Sie unterscheiden möchten, müssen in angezeigt werden die group by-Klausel. Ansonsten ist es genau so, wie Decker sagt.

Jeffrey L Whitledge
quelle
7

Sie können das Ergebnis durch zwei Spalten unterscheiden, die unter SQL verwendet werden:

SELECT COUNT(*) FROM (SELECT DISTINCT c1, c2 FROM [TableEntity]) TE
Wilson Wu
quelle
4

Wenn Sie immer noch nur nach einer Spalte gruppieren möchten (wie ich wollte), können Sie die Abfrage verschachteln:

select c1, count(*) from (select distinct c1, c2 from t) group by c1
Denno
quelle
3

Teile meinen dummen Gedanken:

Vielleicht kann ich nur auf c1, aber nicht auf c2 unterscheiden, also kann die Syntax sein, select ([distinct] col)+wo distinctein Qualifikator für jede Spalte ist.

Aber nach dem Nachdenken finde ich, dass es Unsinn ist, nur in einer Spalte zu unterscheiden . Nehmen Sie die folgende Beziehung:

   | A | B
__________
  1| 1 | 2
  2| 1 | 1

Wenn wir select (distinct A), B, was ist dann das richtige Bfür A = 1?

Somit distinctist ein Qualifier für a statement.

youkaichao
quelle