Heim > Fragen und Antworten > Hauptteil
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粉7187309562024-03-31 14:00:05
一种方法是使用带有子查询的左连接,它仅返回最大值。需要使用 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 ;
为了更容易理解,运行下面的查询,您将发现服务表中除值 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 ;
编辑。答案在 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 ;
P粉9365685332024-03-31 09:12:10
使用求和
:
select position, sum(experience = 100) from tbl group by position