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?

pengguna1336827
sumber

Jawaban:

182

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

StilesCrisis
sumber
26
ORDER BY LENGTH(description) DESC LIMIT 1

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

Scott Nelson
sumber
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`
telur
sumber
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.

Tushar Kesare
sumber
0

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

pengguna1336827
sumber
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