Rumah  >  Soal Jawab  >  teks badan

Cari nilai maksimum dalam jadual dan kemudian paparkan kumpulan SQL secara berasingan dan bilangan nilai maksimum dalam setiap kumpulan SQL

rreeee

Jadi, inilah PERKHIDMATAN jadual saya, di mana (seperti yang kita lihat) pengalaman maksimum ialah 100. Saya perlu menulis pertanyaan untuk mencari bilangan kejadian 100 dalam pengalaman untuk setiap kumpulan yang terdiri daripada kedudukan (kiri, kanan, atas, bawah).

Jadi saya menulis:-

ID  POSITION    EXPERIENCE  SALARY
1   top               90    1500
2   bottom           100    1500
3   top               90    750
4   left              90    1000
5   right            100    1300
6   top               90    1500
7   left              80    2000
8   top               80    1000
9   bottom           100    2000
10  left             100    2000

Output yang dijangkakan:-

select position,count(*)
from service
group by position
having experience=(select max(experience) from service);

Tetapi, Ia memberi saya ralat: - "Bukan ungkapan GROUP BY"

Logik saya ialah mula-mula saya membahagikannya kepada kumpulan dan kemudian menggunakan klausa yang mempunyai untuk mengira tupel dalam setiap kumpulan dengan pengalaman yang sama dengan nilai maksimum. pengalaman.

P粉451614834P粉451614834190 hari yang lalu378

membalas semua(2)saya akan balas

  • P粉718730956

    P粉7187309562024-03-31 14:00:05

    Salah satu cara ialah menggunakan gabungan kiri dengan subkueri, yang hanya mengembalikan nilai maksimum. Kes diperlukan untuk mengembalikan kumpulan dengan nilai maksimum yang sewenang-wenangnya.

    SELECT s.position,
           sum(case when max_experience is null then 0 else 1 end ) as max_count
    FROM service s
    LEFT JOIN  ( select max(experience) as max_experience
                 from service 
                ) as s1 ON  s.experience = s1.max_experience
    group by s.position
    order by max_count desc ;

    https://dbfiddle.uk/-8pHZ8wm

    Untuk memudahkan pemahaman, jalankan pertanyaan di bawah dan anda akan mendapati bahawa max_experience kosong dalam setiap baris dalam jadual perkhidmatan kecuali nilai 100. Ringkasnya, anda hanya perlu mengira baris dalam kumpulan dengan nilai 100 dan 0 yang belum mencapai nilai pengalaman maksimum.

    SELECT s.*,s1.*
    FROM service s
    LEFT JOIN  (select max(experience) as max_experience
                 from service 
                ) as s1 ON  s.experience = s1.max_experience ;

    https://dbfiddle.uk/al8YYLk9

    Edit. Jawapannya juga berfungsi dalam Oracle, tetapi kata kunci selepas subquery perlu dialih keluar as

    SELECT s.position,
           sum(case when max_experience is null then 0 else 1 end ) as max_count
    FROM service s
    LEFT JOIN  ( select max(experience) as max_experience
                 from service 
                )  s1 ON  s.experience = s1.max_experience
    group by s.position
    order by max_count desc ;

    https://dbfiddle.uk/hhGB_xXx

    balas
    0
  • P粉936568533

    P粉9365685332024-03-31 09:12:10

    Gunakan 求和:

    select position, sum(experience = 100) from tbl group by position

    Lihat biola.

    balas
    0
  • Batalbalas