Cari nilai maksimum dalam jadual dan kemudian paparkan kumpulan SQL secara berasingan dan bilangan nilai maksimum dalam setiap kumpulan SQL
P粉451614834
P粉451614834 2024-03-30 15:53:50
0
2
445

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粉451614834
P粉451614834

membalas semua(2)
P粉718730956

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

P粉936568533

Gunakan 求和:

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

Lihat biola.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan