Bagaimana untuk MENGUMPULKAN OLEH berbilang lajur dengan berbilang nilai HAVING dalam MySQL?
P粉775723722
P粉775723722 2024-02-26 12:04:45
0
1
425

Saya cuba mencipta pertanyaan mysql untuk melihat jadual tempat pertanyaan carian disimpan. Pertanyaan ini cuba mendapatkan semua baris yang sepadan dengan kriteria berikut:

  • >= untuk dating
  • Kembalikan hanya baris di mana pertanyaan carian muncul 3 kali atau lebih
  • Juga hanya mengembalikan baris di mana 2 atau lebih pengguna telah menggunakan pertanyaan carian

Pertanyaan ini tidak berfungsi tetapi harus memberikan gambaran keseluruhan tentang perkara yang saya cuba lakukan:

SELECT 
  * 
FROM 
  `analytics` 
WHERE 
  `date` >= '2021-01-01' 
GROUP BY 
  `query` 
HAVING 
  COUNT(*) >= 3 
  AND 
GROUP BY 
  `user` 
HAVING 
  COUNT(*) >= 2 
ORDER BY 
  id DESC;

Contoh data

id Pengguna Pertanyaan Tarikh
1 5 Apa itu anjing 2021-01-01
2 5 Apa itu anjing 2021-01-01
3 6 Apa itu anjing 2021-01-01
4 7 Apa itu anjing 2021-01-01
5 7 Apa itu saudara 2021-01-01

Contoh SQL

SELECT 
  * 
FROM 
  analytics 
WHERE 
  date >= '2021-01-01' 
GROUP BY 
  query 
HAVING 
  COUNT(*) >= 3 
  AND 
GROUP BY 
  user 
HAVING 
  COUNT(*) >= 2 
ORDER BY 
  id DESC;

Menggunakan nilai yang ditetapkan dalam pertanyaan di atas, satu baris harus dikembalikan untuk pertanyaan "Apakah itu anjing", semua lajur lain adalah tidak penting.

Saya tahu anda boleh KUMPULAN MENGIKUT lajur yang berasingan dengan koma, tetapi saya tidak dapat memikirkan cara untuk menetapkan nilai yang berbeza untuk setiap lajur.

P粉775723722
P粉775723722

membalas semua(1)
P粉818317410

Anda boleh menetapkan kedua-dua syarat dalam klausa HAVING yang sama:

SELECT `query` 
FROM `analytics` 
WHERE `date` >= '2021-01-01' 
GROUP BY `query`
HAVING COUNT(*) >= 3 AND COUNT(DISTINCT `user`) >= 2;
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan