PostgreSQL Distinct Count von Feldwerten
- Ermitteln der eindeutigen Anzahl von Feldwerten in PostgreSQL
- Ermitteln der Anzahl eindeutiger Feldwerte auf der Grundlage eines anderen Feldes in PostgreSQL
Das Abrufen der unterschiedlichen Werte in einem Feld ist eine wichtige Abfrage, die Sie kennen sollten. In diesem Tutorial wird erläutert, wie Sie die eindeutige Anzahl von Werten in einem Feld abrufen.
Ermitteln der eindeutigen Anzahl von Feldwerten in PostgreSQL
Stellen Sie sich eine quiz_score
-Tabelle vor, die die Punktzahl jedes Teilnehmers in einem Quizspiel verfolgt.
id | player_id | score |
---|---|---|
1 | 1 | 10 |
2 | 2 | 10 |
3 | 3 | 18 |
4 | 4 | 69 |
5 | 5 | 24 |
6 | 6 | 67 |
7 | 7 | 94 |
8 | 8 | 68 |
9 | 9 | 33 |
10 | 10 | 5 |
Hier ist die CREATE
-Anweisung für die Tabelle:
CREATE TABLE quiz_score
(
id integer NOT NULL GENERATED ALWAYS AS IDENTITY,
player_id integer NOT NULL,
score integer NOT NULL,
CONSTRAINT quiz_score_pkey PRIMARY KEY (id)
);
Und hier ist die INSERT
-Anweisung, um die Tabelle mit den Daten zu füllen:
INSERT INTO quiz_score (player_id, score)
SELECT i, floor(random()*(100-0+1))
FROM generate_series(1,10000000) i;
Wir haben zehn Millionen Zufallsergebnisse in unsere Tabelle eingefügt. Lassen Sie uns herausfinden, wie viele verschiedene Punktzahlen es in unserer Tabelle gibt, indem Sie diese Abfrage ausführen:
SELECT COUNT(DISTINCT score) FROM quiz_score;
Diese Abfrage dauerte 3 Sekunden und 391 Millisekunden mit einer Anzahl von 101 unterschiedlichen Werten.
Wir können auch diese andere Abfrage ausführen, um die Anzahl der unterschiedlichen Bewertungen in der Tabelle zu ermitteln:
SELECT COUNT(*) FROM (SELECT DISTINCT score FROM quiz_score) AS DistinctScores;
Diese neue Abfrage dauerte 1 Sekunde und 572 Millisekunden mit einer Anzahl von 101 unterschiedlichen Werten.
Wie wir sehen können, war die zweite Abfrage schneller. Beide Abfragen funktionieren gut, aber die zweite Abfrage war in diesem Fall schneller.
Ermitteln der Anzahl eindeutiger Feldwerte auf der Grundlage eines anderen Feldes in PostgreSQL
Wir werden nun eine neue Rubrik namens Expertise
einführen. Dieses Feld wird basierend auf der Punktzahl des Spielers ausgefüllt.
Die Expertise
-Werte sind: Beginner
, Intermediary
, Expert
und Master
. Die Expertise eines Spielers wird durch die Punktzahl eines Spielers bestimmt, wie hier gezeigt:
Expertise | score |
---|---|
Beginner | 0 - 50 |
Intermediary | 51 - 80 |
Expert | 81 - 90 |
Master | 91 - 100 |
Die neu aktualisierte quiz_score
-Tabelle lautet:
id | player_id | score | player_rank |
---|---|---|---|
1 | 1 | 10 | Beginner |
2 | 2 | 10 | Beginner |
3 | 3 | 18 | Beginner |
4 | 4 | 69 | Intermediary |
5 | 5 | 24 | Beginner |
6 | 6 | 67 | Intermediary |
7 | 7 | 94 | Master |
8 | 8 | 68 | Intermediary |
9 | 9 | 33 | Beginner |
34 | 34 | 89 | Expert |
Hier ist die Anweisung ALTER TABLE
, um die neue Spalte zur Tabelle hinzuzufügen:
ALTER TABLE quiz_score ADD COLUMN expertise text;
Und hier ist die UPDATE
-Anweisung, um das Expertise-Feld zu füllen:
UPDATE quiz_score
SET expertise =
(CASE
WHEN score >= 0
AND score <= 50 THEN 'Beginner'
WHEN score > 50
AND score <= 80 THEN 'Intermediary'
WHEN score > 80
AND score <= 90 THEN 'Expert'
WHEN score > 90 THEN 'Master'
END);
Im vorherigen Beispiel haben wir uns unterschiedliche Bewertungen in der Tabelle angesehen. Lassen Sie uns in diesem Beispiel herausfinden, wie viele unterschiedliche Punktzahlen es für jedes Fachwissen in unserer Tabelle gibt, indem Sie diese Abfrage ausführen:
SELECT expertise, COUNT(DISTINCT score)
FROM quiz_score
GROUP BY expertise
Hier ist das Ergebnis:
expertise | count
--------------+-------
Beginner | 51
Intermediary | 10
Expert | 30
Master | 10
Aus dieser Abfrage können wir erkennen, dass die Expertise Beginner
51 unterschiedliche Punktzahlen hat, Intermediary
10 unterschiedliche Punktzahlen hat, Expert
30 unterschiedliche Punktzahlen hat und Master
10 unterschiedliche Punktzahlen hat. Die Abfrage dauerte 14 Sekunden und 515 Millisekunden.
Wir können auch diese andere Abfrage ausführen, um die Anzahl der unterschiedlichen Bewertungen in der Tabelle zu ermitteln:
SELECT
DISTINCT ON (expertise) expertise,
COUNT(DISTINCT score)
FROM
quiz_score
GROUP BY expertise
Diese neue Abfrage dauerte 12 Sekunden und 165 Millisekunden. Im zweiten Beispiel war die zweite Abfrage schneller, aber beide Abfragen funktionieren einwandfrei.
In diesem Lernprogramm haben wir besprochen, wie Sie unterschiedliche Werte in einem Feld erhalten und wie Sie unterschiedliche Werte in einem Feld basierend auf unterschiedlichen Werten eines anderen Felds erhalten.