Bagaimana cara memilih 'string' terpanjang dari tabel saat mengelompokkan


90

Contoh:

SELECT partnumber, manufacturer, condition, SUM(qty), AVG(price), description FROM parts

WHERE [something]

GROUP BY partnumber, manufacturer, condition

Saya memiliki beberapa deskripsi yang kosong, dan mungkin ada banyak partnumber, pabrikan, nilai kondisi, dan pada grup itu tampaknya mengambil deskripsi pertama yang tersedia, yang bisa kosong. Saya ingin mendapatkan deskripsi terlama yang tersedia.

saya mencoba ini:

MAX(LENGTH(description)) 

Namun itu mengembalikan jumlah karakter dalam string. Apakah mungkin untuk melakukan apa yang saya coba lakukan di MySQL?

Jawaban:


182

Coba ORDER BY LENGTH(description) DESCdan gunakan LIMIT 1untuk hanya mendapatkan yang terbesar.


26
ORDER BY LENGTH(description) DESC LIMIT 1

Ini akan mengurutkan hasil dari terpanjang ke terpendek dan memberikan hasil pertama (terpanjang.)


3
SELECT   partnumber, manufacturer, `condition`, SUM(qty), AVG(price), description
FROM     parts
WHERE    [something] AND LENGTH(description) = (
           SELECT MAX(LENGTH(description))
           FROM   parts AS p
           WHERE  p.partnumber   = parts.partnumber
              AND p.manufacturer = parts.manufacturer
              AND p.condition    = parts.condition
         )
GROUP BY partnumber, manufacturer, `condition`

Ini menurut saya 'mahal', dalam waktu berjalan dan kode tertulis, untuk pemilihan satu catatan. Menurut saya sub-kueri bukanlah cara terbaik untuk menangani masalah.
MJH

1
@rosa: Anda benar tentang verbositas, meskipun saya tidak yakin waktu kinerja akan sangat berbeda (baik ini dan ORDER BY memerlukan filesort). Keuntungan dari versi ini adalah ia mengembalikan semua rekaman dengan panjang maksimal, bukan hanya satu rekaman tak tentu.
eggyal

@rosa: juga, melihat kembali pertanyaan ini, saya pikir pemahaman saya adalah bahwa OP ingin mendapatkan string terpanjang di setiap grup, daripada hasil terpanjang secara keseluruhan.
eggyal

1

MAX (LENGTH (description)) mengembalikan panjang nilai terpanjang di kolom Description.


0

Sepertinya saya menjawab pertanyaan saya sendiri, MAX (deskripsi) sepertinya berfungsi dengan baik.


7
Itu tidak akan memberi Anda deskripsi terpanjang , melainkan deskripsi yang merupakan maksimum leksikal (yaitu dalam urutan abjad). Namun, karena pengurutan itu akan menempatkan deskripsi yang tidak kosong setelah yang kosong, itu akan selalu menghasilkan deskripsi yang tidak kosong jika ada: mungkin ini cukup untuk kebutuhan Anda?
eggyal
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.