Suchen Sie den Maximalwert in der Tabelle und zeigen Sie dann die SQL-Gruppen separat sowie die Anzahl der Maximalwerte in jeder SQL-Gruppe an
P粉451614834
P粉451614834 2024-03-30 15:53:50
0
2
446

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

Das ist also mein TischSERVICE, bei dem (wie wir sehen können) die maximale Erfahrung 100 beträgt. Ich muss eine Abfrage schreiben, um die Anzahl der Vorkommen von 100 in der Erfahrung für jede nach Position gebildete Gruppe (links, rechts, oben, unten) zu ermitteln.

Also schrieb ich:-

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

Erwartete Ausgabe:-

POSITION  COUNT(*)
bottom         2 
left           1
right          1
top            0

Aber, Es gab mir eine Fehlermeldung: - „Kein GROUP BY-Ausdruck“

Meine Logik besteht darin, dass ich es zuerst in Gruppen aufteile und dann die Haveing-Klausel verwende, um die Tupel in jeder Gruppe zu zählen, deren Erfahrung dem Maximalwert entspricht. Erfahrung.

P粉451614834
P粉451614834

Antworte allen(2)
P粉718730956

一种方法是使用带有子查询的左连接,它仅返回最大值。需要使用 case 来返回具有任意最大值的组。

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

为了更容易理解,运行下面的查询,您将发现服务表中除值 100 之外的每一行中 max_experience 均为空。简单来说,您只需要计算组中值为 100 和 0 的行还没有达到最大经验值。

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

编辑。答案在 Oracle 中也有效,但需要删除子查询后面的关键字 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

使用求和

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

参见小提琴

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage