如何使用 SQL 和 PHPmyadmin 从我的数据集中获取特定数据?
How can i get a specific data from my dataset using SQL and PHPmyadmin?
我是 sql 的新手。
我有 3 个数据集,
患者(列:id 年龄 Zip_Code、体型、体重、性别)
blood_tests(列:test_ID、test_date、blood_sugar、laboratory_ID、patient_ID)
实验室(列:id、名称、Zip_code、部门)
如何获得每个中心的患者数量?
我做了这段代码,但它没有给出每个
的数字
select DISTINCT patient_ID, laboratory_ID from patient,blood_tests where patient.id = blood_tests.patient_ID AND blood_tests.laboratory_ID = laboratory.id;
但是我不知道如何得到每个中心的患者总数,因为他们中的一些人在同一个中心做了不止一次检查,而且他们在很多实验室做过检查?
对于第二个问题。他要求我们获得特定患者在名为 'NWB' 的实验室中进行的 4 项测试。
我这样做了,注意到他对 ID = 25 很耐心,但是我怎么能在不指定 ID 为 25 的情况下得到它。
select patient_ID, laboratory.name from patient, blood_tests,laboratory where patient_ID = blood_tests.patient_ID AND blood_tests.laboratory_ID = laboratory.id HAVING laboratory.name = "NWB";
提前谢谢你。
您需要使用 COUNT(DISTINCT ~ ) 和 GROUP BY。我们不需要使用 table 患者,因为我们在 blood_tests 中有 patient_ID。
SELECT
COUNT( DISTINCT bt.patient_ID) number_patients ,
bt.laboratory_ID
FROM
blood_tests bt
JOIN
laboratory l
ON bt.laboratory_ID = l.id
GROUP BY
laboratory_ID;
对于第二个请求:
SELECT
GROUP_CONCAT(
bt.test_ID
SEPARATOR CHAR(10)
) test_IDs,
bt.patient_ID patientID,
bt.laboratory_ID. labo_ID,
l.name lab_name,
l.Zip_code. lab_zip,
l.departments. lab_dept
FROM
blood_tests bt
JOIN
laboratory l
ON
bt.laboratory_ID = l.id
WHERE
l.name = 'NWB'
GROUP BY
bt.patient_ID ,
bt.laboratory_ID,
l.name lab_name,
l.Zip_code,
l.departments
HAVING
COUNT(bt.test_ID) = 4;
假设您将 Mysql 与 PhpMyAdmin 一起使用(从现在起我将其称为 PMA)
您可以使用 GROUP BY
关键字获得每个实验室的患者数量。
您可以阅读(非官方)documentation here。
使用 GROUP BY
您可以获得每个实验室的测试计数
SELECT laboratory_ID, COUNT(*) As num_tests FROM blood_tests WHERE 1 GROUP BY laboratory_ID;
所以查询 returns 2 列,一列用于实验室 ID,一列用于该实验室的测试数量。
您可以使用 JOINS 语句查看实验室的邮政编码,在这种情况下您应该使用 INNER JOIN
单击 here 获取(非官方)文档
此查询将为您提供为每个实验室进行血液测试的不同患者的数量。查询将具有相同 laboratory_ID 的所有记录分组,然后计算每个 GROUP 的 DISTINCT 患者数。在这种情况下,不同意味着即使有多个记录具有相同的 patient_ID 和 laboratory_ID,每个患者在每个 GROUP 中也只被计算一次。然而,该患者仍可计入其他组。
SELECT laboratory_ID, COUNT(DISTINCT patient_ID)
FROM blood_tests
GROUP BY laboratory_ID;
您可以加入实验室table以显示实验室名称而不是id。
SELECT laboratory.nom, COUNT(DISTINCT blood_tests.patient_ID)
FROM blood_tests
JOIN laboratory ON laboratory.id = blood_tests.laboratory_ID
GROUP BY blood_tests.laboratory_ID;
您的另一个问题令人困惑,因为没有 'the' 对已进行 4 次测试的患者进行测试。将有 4 项测试 - 其中一项是 'the' 测试。
这是一个查询,将列出所有在实验室进行过 4 次测试且 ID 为 42 的患者的 ID。
SELECT patient_ID
FROM blood_tests
WHERE laboratory_ID = 42
GROUP BY patient_ID
HAVING COUNT(patient_ID) = 4;
根据 OP 的评论进行编辑:
我希望这对任何试图学习如何查询数据库的人都有用。
当您查询数据库时,您是根据在数据库中找到的信息而不是根据您已知的真实信息来询问它的信息。 您首先需要弄清楚您要问的是什么。
如果你说你知道有一些(一些意味着至少一个)特定患者在实验室 NWB 进行了恰好 4 次测试,你可以要求数据库列出在实验室 NWB 进行恰好 4 次测试的所有患者.
如果您认识特定患者并想要进行测试,那么您可以向数据库询问在实验室 NWB 为该特定患者进行的所有测试。在这种情况下,您知道其中有 4 个不是选择标准,因此它不会出现在您的查询中。
如果您知道有一些患者刚好做了 4 次测试并且您想要接受他们的测试。你问数据库干什么?您可能会问:找到在 NWB 实验室刚好完成 4 次测试的任何患者的所有测试。但是,如果有其他患者也在该实验室进行了恰好 4 次测试,您也可以进行他们的测试。
在上面您看到了如何按条件将记录分组在一起以及如何计算每个组的成员。
HAVING 子句允许您根据适用于组的条件限制结果。
WHERE 子句允许您根据适用于记录的条件限制结果。
您应该能够使用上面显示的内容为任何这些场景构建查询。
我是 sql 的新手。 我有 3 个数据集, 患者(列:id 年龄 Zip_Code、体型、体重、性别) blood_tests(列:test_ID、test_date、blood_sugar、laboratory_ID、patient_ID) 实验室(列:id、名称、Zip_code、部门)
如何获得每个中心的患者数量? 我做了这段代码,但它没有给出每个
的数字select DISTINCT patient_ID, laboratory_ID from patient,blood_tests where patient.id = blood_tests.patient_ID AND blood_tests.laboratory_ID = laboratory.id;
但是我不知道如何得到每个中心的患者总数,因为他们中的一些人在同一个中心做了不止一次检查,而且他们在很多实验室做过检查?
对于第二个问题。他要求我们获得特定患者在名为 'NWB' 的实验室中进行的 4 项测试。 我这样做了,注意到他对 ID = 25 很耐心,但是我怎么能在不指定 ID 为 25 的情况下得到它。
select patient_ID, laboratory.name from patient, blood_tests,laboratory where patient_ID = blood_tests.patient_ID AND blood_tests.laboratory_ID = laboratory.id HAVING laboratory.name = "NWB";
提前谢谢你。
您需要使用 COUNT(DISTINCT ~ ) 和 GROUP BY。我们不需要使用 table 患者,因为我们在 blood_tests 中有 patient_ID。
SELECT
COUNT( DISTINCT bt.patient_ID) number_patients ,
bt.laboratory_ID
FROM
blood_tests bt
JOIN
laboratory l
ON bt.laboratory_ID = l.id
GROUP BY
laboratory_ID;
对于第二个请求:
SELECT
GROUP_CONCAT(
bt.test_ID
SEPARATOR CHAR(10)
) test_IDs,
bt.patient_ID patientID,
bt.laboratory_ID. labo_ID,
l.name lab_name,
l.Zip_code. lab_zip,
l.departments. lab_dept
FROM
blood_tests bt
JOIN
laboratory l
ON
bt.laboratory_ID = l.id
WHERE
l.name = 'NWB'
GROUP BY
bt.patient_ID ,
bt.laboratory_ID,
l.name lab_name,
l.Zip_code,
l.departments
HAVING
COUNT(bt.test_ID) = 4;
假设您将 Mysql 与 PhpMyAdmin 一起使用(从现在起我将其称为 PMA)
您可以使用 GROUP BY
关键字获得每个实验室的患者数量。
您可以阅读(非官方)documentation here。
使用 GROUP BY
您可以获得每个实验室的测试计数
SELECT laboratory_ID, COUNT(*) As num_tests FROM blood_tests WHERE 1 GROUP BY laboratory_ID;
所以查询 returns 2 列,一列用于实验室 ID,一列用于该实验室的测试数量。
您可以使用 JOINS 语句查看实验室的邮政编码,在这种情况下您应该使用 INNER JOIN
单击 here 获取(非官方)文档
此查询将为您提供为每个实验室进行血液测试的不同患者的数量。查询将具有相同 laboratory_ID 的所有记录分组,然后计算每个 GROUP 的 DISTINCT 患者数。在这种情况下,不同意味着即使有多个记录具有相同的 patient_ID 和 laboratory_ID,每个患者在每个 GROUP 中也只被计算一次。然而,该患者仍可计入其他组。
SELECT laboratory_ID, COUNT(DISTINCT patient_ID)
FROM blood_tests
GROUP BY laboratory_ID;
您可以加入实验室table以显示实验室名称而不是id。
SELECT laboratory.nom, COUNT(DISTINCT blood_tests.patient_ID)
FROM blood_tests
JOIN laboratory ON laboratory.id = blood_tests.laboratory_ID
GROUP BY blood_tests.laboratory_ID;
您的另一个问题令人困惑,因为没有 'the' 对已进行 4 次测试的患者进行测试。将有 4 项测试 - 其中一项是 'the' 测试。
这是一个查询,将列出所有在实验室进行过 4 次测试且 ID 为 42 的患者的 ID。
SELECT patient_ID
FROM blood_tests
WHERE laboratory_ID = 42
GROUP BY patient_ID
HAVING COUNT(patient_ID) = 4;
根据 OP 的评论进行编辑:
我希望这对任何试图学习如何查询数据库的人都有用。
当您查询数据库时,您是根据在数据库中找到的信息而不是根据您已知的真实信息来询问它的信息。 您首先需要弄清楚您要问的是什么。
如果你说你知道有一些(一些意味着至少一个)特定患者在实验室 NWB 进行了恰好 4 次测试,你可以要求数据库列出在实验室 NWB 进行恰好 4 次测试的所有患者.
如果您认识特定患者并想要进行测试,那么您可以向数据库询问在实验室 NWB 为该特定患者进行的所有测试。在这种情况下,您知道其中有 4 个不是选择标准,因此它不会出现在您的查询中。
如果您知道有一些患者刚好做了 4 次测试并且您想要接受他们的测试。你问数据库干什么?您可能会问:找到在 NWB 实验室刚好完成 4 次测试的任何患者的所有测试。但是,如果有其他患者也在该实验室进行了恰好 4 次测试,您也可以进行他们的测试。
在上面您看到了如何按条件将记录分组在一起以及如何计算每个组的成员。 HAVING 子句允许您根据适用于组的条件限制结果。 WHERE 子句允许您根据适用于记录的条件限制结果。
您应该能够使用上面显示的内容为任何这些场景构建查询。