Angenommen, ich habe eine Tabelle mit einer numerischen Spalte (nennen wir sie "Punktzahl").
Ich möchte eine Zählungstabelle erstellen, die zeigt, wie oft Punkte in jedem Bereich angezeigt wurden.
Beispielsweise:
Punktebereich | Anzahl der Vorkommen ------------------------------------- 0-9 | 11 10-19 | 14 20-29 | 3 ... | ...
In diesem Beispiel gab es 11 Zeilen mit Bewertungen im Bereich von 0 bis 9, 14 Zeilen mit Bewertungen im Bereich von 10 bis 19 und 3 Zeilen mit Bewertungen im Bereich von 20 bis 29.
Gibt es eine einfache Möglichkeit, dies einzurichten? Was empfehlen Sie?
sql
sql-server
tsql
Hugh
quelle
quelle
Ein alternativer Ansatz würde darin bestehen, die Bereiche in einer Tabelle zu speichern, anstatt sie in die Abfrage einzubetten. Sie würden am Ende einen Tisch haben, nennen Sie ihn Bereiche, der so aussieht:
Und eine Abfrage, die so aussieht:
Dies bedeutet zwar das Einrichten einer Tabelle, ist jedoch leicht zu pflegen, wenn sich die gewünschten Bereiche ändern. Keine Codeänderungen notwendig!
quelle
Ich sehe hier Antworten, die in der SQL Server-Syntax nicht funktionieren. Ich würde ... benutzen:
BEARBEITEN: siehe Kommentare
quelle
In postgres (wo
||
ist der String-Verkettungsoperator):gibt:
quelle
James Currans Antwort war meiner Meinung nach die prägnanteste, aber die Ausgabe war nicht korrekt. Für SQL Server lautet die einfachste Anweisung wie folgt:
Dies setzt eine temporäre # Scores-Tabelle voraus, die ich zum Testen verwendet habe. Ich habe gerade 100 Zeilen mit einer Zufallszahl zwischen 0 und 99 gefüllt.
quelle
quelle
quelle
Auf diese Weise müssen Sie keine Bereiche angeben und sollten SQL Server-unabhängig sein. Mathe FTW!
quelle
Ich würde das etwas anders machen, damit es skaliert, ohne jeden Fall definieren zu müssen:
Nicht getestet, aber Sie bekommen die Idee ...
quelle
quelle
Stellen Sie sicher, dass Sie ein anderes Wort als 'range' verwenden, wenn Sie sich in MySQL befinden. Andernfalls wird beim Ausführen des obigen Beispiels eine Fehlermeldung angezeigt.
quelle
Da es sich bei der nach (
Range
) sortierten Spalte um eine Zeichenfolge handelt, wird anstelle der numerischen Sortierung die Zeichenfolgen- / Wortsortierung verwendet.Solange die Zeichenfolgen Nullen haben, um die Zahlenlängen aufzufüllen, sollte die Sortierung immer noch semantisch korrekt sein:
Wenn der Bereich gemischt ist, füllen Sie einfach eine zusätzliche Null auf:
quelle
Versuchen
quelle
Vielleicht fragen Sie, ob Sie solche Dinge am Laufen halten sollen ...
Natürlich rufen Sie einen vollständigen Tabellenscan für die Abfragen auf. Wenn die Tabelle mit den zu bewertenden Bewertungen (Aggregationen) groß ist, möchten Sie möglicherweise eine Lösung mit besserer Leistung. Sie können eine sekundäre Tabelle erstellen und Regeln verwenden, z
on insert
- Sie könnten es untersuchen.Allerdings haben nicht alle RDBMS-Engines Regeln!
quelle