Misalkan saya memiliki tabel dengan kolom numerik (sebut saja "skor").
Saya ingin menghasilkan tabel hitungan, yang menunjukkan berapa kali skor muncul di setiap rentang.
Sebagai contoh:
rentang skor | jumlah kejadian ------------------------------------- 0-9 | 11 10-19 | 14 20-29 | 3 ... | ...
Dalam contoh ini ada 11 baris dengan skor di kisaran 0 hingga 9, 14 baris dengan skor di kisaran 10 hingga 19, dan 3 baris dengan skor di kisaran 20-29.
Apakah ada cara mudah untuk mengatur ini? Apa yang kamu sarankan?
sql
sql-server
tsql
Hugh
sumber
sumber
Pendekatan alternatif akan melibatkan menyimpan rentang dalam tabel, alih-alih menyematkannya dalam kueri. Anda akan berakhir dengan sebuah meja, sebut saja Ranges, yang terlihat seperti ini:
Dan permintaan yang terlihat seperti ini:
Ini berarti menyiapkan tabel, tetapi akan mudah untuk mempertahankannya ketika rentang yang diinginkan berubah. Tidak diperlukan perubahan kode!
sumber
Saya melihat jawaban di sini yang tidak akan berfungsi dalam sintaks SQL Server. Saya akan menggunakan:
Sunting: lihat komentar
sumber
Dalam postgres (di mana
||
operator string concatenation):memberi:
sumber
Jawaban James Curran adalah yang paling ringkas menurut saya, tetapi hasilnya tidak benar. Untuk SQL Server pernyataan paling sederhana adalah sebagai berikut:
Ini mengasumsikan tabel sementara #Scores yang saya gunakan untuk mengujinya, saya baru saja mengisi 100 baris dengan angka acak antara 0 dan 99.
sumber
sumber
sumber
Ini akan memungkinkan Anda untuk tidak harus menentukan rentang, dan harus agnostik SQL server. FTW Matematika!
sumber
Saya akan melakukan ini sedikit berbeda sehingga skala tanpa harus mendefinisikan setiap kasus:
Tidak diuji, tetapi Anda mendapatkan idenya ...
sumber
sumber
Pastikan Anda menggunakan kata selain 'rentang' jika Anda menggunakan MySQL, atau Anda akan mendapatkan kesalahan saat menjalankan contoh di atas.
sumber
Karena kolom yang diurutkan pada (
Range
) adalah string, pengurutan string / kata digunakan bukan pengurutan numerik.Selama string memiliki nol untuk menambah panjang angka, penyortiran harus secara semantik benar:
Jika rentang tersebut dicampur, cukup masukkan nol tambahan:
sumber
Mencoba
sumber
Mungkin Anda bertanya tentang menjaga hal-hal seperti itu berjalan ...
Tentu saja Anda akan meminta pemindaian tabel penuh untuk kueri dan jika tabel yang berisi skor yang perlu dihitung (agregasi) besar, Anda mungkin menginginkan solusi yang berkinerja lebih baik, Anda bisa membuat tabel sekunder dan menggunakan aturan, seperti
on insert
- Anda mungkin melihatnya.Namun, tidak semua mesin RDBMS memiliki aturan!
sumber