php - 错误使用 GROUP BY
问题描述
我在查询时遇到了真正的问题。数据库实体是:
Paziente (Codice_Fiscale, Nome_Paziente, Cognome_Paziente, Data_Nascita, Luogo_Nascita)
Appuntamento (Codice_Appuntamento, Data_Appuntamento, Ora_Appuntamento, Codice_Fiscale)
Intervento (Codice_Intervento, Tipo_Intervento, Sala_Intervento, Data_Intervento, Ora_Intervento, Codice_Fiscale_Paziente, ID_Dentista)
Dentista (ID_Dentista, Nome_Dentista, Cognome_Dentista)
我需要做一个查询,显示按干预类型分组的约会列表。它应该是这样的:
Tipo_Intervento COUNT(*)
Chirurgia dentale 1
Cura carie 2
Estrazione dentale 1
Pulizia dentale 3
当我使用这个查询时,我可以正确地做到这一点:
SELECT intervento.Tipo_Intervento, COUNT(*)
FROM intervento
GROUP BY intervento.Tipo_Intervento
但我需要将数据库“intervento”链接到“appuntamento”(因为这是一个练习),当我使用它时:
SELECT COUNT(DISTINCT appuntamento.Codice_Appuntamento) AS Numero_Appuntamenti, intervento.Tipo_Intervento AS Tipologia_intervento
FROM appuntamento, intervento
WHERE appuntamento.Codice_Fiscale = intervento.Codice_Fiscale_Paziente
GROUP BY intervento.Tipo_Intervento
我得到了错误的值:
Numero_Appuntamenti Tipologia_intervento
2 Chirurgia dentale
4 Cura carie
2 Estrazione dentale
3 Pulizia dentale
问题出在 GROUP BY intervento.Tipo_Intervento 中,它增加了约会的数量,事实上,如果我使用 GROUP BY appuntamento.Codice_Appuntamento 我得到:
Numero_Appuntamenti Tipologia_intervento
1 Pulizia dentale
1 Estrazione dentale
1 Pulizia dentale
1 Cura carie
1 Cura carie
1 Pulizia dentale
1 Estrazione dentale
没错,但我需要将其分组。
有人可以帮助我吗?(请原谅我的英语不好,因为你可以看到这不是我的语言)
编辑:这是表“appuntamento”:
Codice_Appuntamento Data_Appuntamento Ora_Appuntamento Codice_Fiscale
001 2020-05-05 16:00:00.000000 RSSMRA80A01H501U
002 2020-07-03 16:30:00.000000 VRDGPP85E02F205P
003 2020-06-05 16:00:00.000000 RSSMRA80A01H501U
004 2020-08-14 17:15:00.000000 BNCGNN83D03L219B
005 2020-08-27 17:45:00.000000 BNCGNN83D03L219B
006 2020-07-05 16:00:00.000000 RSSMRA80A01H501U
007 2020-09-13 17:20:00.000000 VRDGPP85E02F205P
而这张表“干预”
Codice_Intervento Tipo_Intervento Sala_Intervento Data_Intervento Ora_Intervento Codice_Fiscale_Paziente ID_Dentista
A_001 Pulizia dentale 1 2020-05-05 16:00:00.000000 RSSMRA80A01H501U D_001
A_002 Estrazione dentale 2 2020-07-03 16:30:00.000000 VRDGPP85E02F205P D_003
A_003 Pulizia dentale 1 2020-06-05 16:00:00.000000 RSSMRA80A01H501U D_001
A_004 Cura carie 3 2020-08-14 17:15:00.000000 BNCGNN83D03L219B D_001
A_005 Chirurgia dentale 5 2020-08-27 17:45:00.000000 BNCGNN83D03L219B D_002
A_006 Pulizia dentale 1 2020-07-05 16:00:00.000000 RSSMRA80A01H501U D_001
A_007 Cura carie 3 2020-09-13 17:20:00.000000 VRDGPP85E02F205P D_002
"Codice accountinge" 和 "ID_Dentista" 是外键,它们是 "paziente" 和 "dentista" 的主键
解决方案
您可以使用此查询:
SELECT max(i.Tipo_Intervento), count(a. Codice_Appuntamento)
FROM intervento as i left join appuntamento as a on i.Codice_Fiscale_Paziente = a.Codice_Fiscale
GROUP BY i.Sala_Intervento
推荐阅读
- android - Delphi10.2 arm-linux-androideabi-ld.exe 问题 + android NDK
- socket.io - Socket.io 提交按钮
- javascript - 带有 ocLazyload 的 webpack 无法同时加载控制器和模板文件
- android - 无法解决:android.content.res.Resources$NotFoundException: Resource ID #0xffffffff
- email - Outlook 2013 邮件中的表格内的背景颜色不起作用
- security - Google 和 Microsoft 的 Docx 预览
- c# - Firebase Javascript 发送多个端点
- django - 访问请求数据对象
- java - Redis 重启时自动将 Storm 拓扑重新连接到 Redis 集群
- php - PHP preg_replace 变量中的字符串