Rumah > Soal Jawab > teks badan
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粉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 ;
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 ;
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 ;
P粉9365685332024-03-31 09:12:10
Gunakan 求和
:
select position, sum(experience = 100) from tbl group by position