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.
一种方法是使用带有子查询的左连接,它仅返回最大值。需要使用 case 来返回具有任意最大值的组。
https://dbfiddle.uk/-8pHZ8wm
为了更容易理解,运行下面的查询,您将发现服务表中除值 100 之外的每一行中 max_experience 均为空。简单来说,您只需要计算组中值为 100 和 0 的行还没有达到最大经验值。
https://dbfiddle.uk/al8YYLk9
编辑。答案在 Oracle 中也有效,但需要删除子查询后面的关键字
as
https://dbfiddle.uk/hhGB_xXx
使用
求和
:参见小提琴。