cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk mengumpulkan baris MySQL menggunakan gabungan nilai bukan nol

Bagaimana untuk menggabungkan/menggabungkan baris dengan memilih nilai terkinibukan nol setiap lajur dalam hasil terkumpul?

id Pengguna Buah-buahan Nombor Masa penciptaan
1 Jane Epal kosong 2022-01-01
2 John Tembikai 32 2022-01-02
3 John kosong 72 2022-01-03
4 John Pear kosong 2022-01-04

Kaedah berikut tidak akan berkesan:

SELECT
  user,
  COALESCE(fruit) as fruit,
  COALESCE(number) as number,
FROM mytable
GROUP BY user
ORDER BY created_at DESC

Saya harap hasilnya adalah:

Jane   Apple   Null
John   Pear    72

Masalahnya ialah fungsi COALESCE() tidak berfungsi dengan set nilai, tetapi hanya dengan senarai.

Banyak topik yang disebut menggunakan MIN() atau MAX() dan bukannya COALESCE() sebagai penyelesaian. Tetapi ini tidak menyelesaikan masalah kerana saya memerlukan nilai baharu untuk menimpa nilai lama, bukan nilai terendah atau tertinggi.

P粉002023326P粉002023326507 hari yang lalu645

membalas semua(1)saya akan balas

  • P粉979586159

    P粉9795861592023-09-07 20:00:18

    Memandangkan COALESCE() bukan fungsi agregat tetapi hanya boleh berfungsi dengan senarai nilai yang diberikan, saya menemui penyelesaian @jsowa dalam siaran ini: Mengapa "COALESCE" tidak berfungsi dengan "GROUP BY"?

    Kami boleh menggunakan SUBSTRING_INDEX(GROUP_CONCAT()) sebaliknya SUBSTRING_INDEX(GROUP_CONCAT())来替代COALESCE().

    Sila beri perhatian khusus kepada klausa ORDER BY dalam GROUP_CONCAT(). Kelemahannya ialah pembatas mestilah watak tidak digunakan dalam sebarang nilai.

    SELECT
      user,
      SUBSTRING_INDEX(GROUP_CONCAT(fruit ORDER BY created_at DESC SEPARATOR '|'), '|', 1) AS fruit,
      SUBSTRING_INDEX(GROUP_CONCAT(number ORDER BY created_at DESC SEPARATOR '|'), '|', 1) AS number,
    FROM mytable
    GROUP BY user;

    Kembalikan hasil

    Jane   Apple   Null
    John   Pear    72

    balas
    0
  • Batalbalas