【发布时间】:2019-05-13 11:51:17
【问题描述】:
我在 Oracle 数据库上遇到了另一个关于 SQL 查询的问题,我无法解决。我有 3 张桌子,其中两张收集有关某些用户和结构的信息,另一张收集有关结构的预订。多亏了一个查询,我应该能够显示对特定城市的结构进行最大预订次数的用户姓名,在本例中为“Torre annunziata”。
为了实现这一点,我创建了一个查询,其目标是显示一个表格,该表格为每个用户显示他为我之前提到的结构所做的预订量。
SELECT P.UTENTE, COUNT(Case when S.Citta = 'Torre Annunziata' then 1 else null end) as cnt
FROM PRENOTAZIONI P JOIN STRUTTURE S ON P.STRUTTURA = S.CODICE JOIN UTENTI ON P.UTENTE = UTENTI.CF
GROUP BY P.UTENTE;
这给出了预期的结果:table1
现在我尝试了以下方法:
SELECT UTENTI.NOME, UTENTI.COGNOME, MAX(cnt)
FROM UTENTI JOIN ( SELECT P.UTENTE, COUNT(Case when S.Citta = 'Torre Annunziata' then 1 else null end) as cnt
FROM PRENOTAZIONI P JOIN STRUTTURE S ON P.STRUTTURA = S.CODICE JOIN UTENTI ON P.UTENTE = UTENTI.CF
GROUP BY P.UTENTE) L ON UTENTI.CF = L.UTENTE
GROUP BY UTENTI.COGNOME, UTENTI.NOME;
但这会返回与上一个查询相同的结果(每个人的姓名)。
根据我的请求,我期望的结果是用户 0000000002 的姓名和姓氏,可能没有显示最大值。
我知道 MAX 函数返回每个用户的值,因此我搜索了 oracle 的替代方案,但我找不到可以应用于我的问题的解决方案。我希望有人能帮助我。 在此先感谢,并为我的英语不好感到抱歉。
【问题讨论】: