Php 左连接不连接数据
尝试联接两个表以根据第一个表(学生\大学时间表)计算种族,其中学生可能会出现一次以上。表2(student_info)只显示了一次学生ID和学生种族。我使用左连接是因为有时我的学生信息表中可能有一个失踪的学生,他们不会被计算在内(因为他们的种族没有被宣布) 正在查看包含种族和计数的摘要: 白色50 黑色25 西班牙裔15 亚洲10 使用我的查询,结果显示为: “空白”60 白色20 黑色15 西班牙裔3 亚洲2Php 左连接不连接数据,php,mysql,Php,Mysql,尝试联接两个表以根据第一个表(学生\大学时间表)计算种族,其中学生可能会出现一次以上。表2(student_info)只显示了一次学生ID和学生种族。我使用左连接是因为有时我的学生信息表中可能有一个失踪的学生,他们不会被计算在内(因为他们的种族没有被宣布) 正在查看包含种族和计数的摘要: 白色50 黑色25 西班牙裔15 亚洲10 使用我的查询,结果显示为: “空白”60 白色20 黑色15 西班牙裔3 亚洲2 要统计的学生总数是正确的,但种族似乎不符合表1(学生计划表)。不知道“空白”是从哪里
要统计的学生总数是正确的,但种族似乎不符合表1(学生计划表)。不知道“空白”是从哪里来的。仅供参考,它不会空白打印。它只是显示为丢失,旁边有一个数字。有人能帮我检查一下我的问题吗?我一定遗漏了什么。你把左连接原理和右连接混淆了。 这句话是错误的:“我使用的是左连接,因为有时我的学生信息表中可能有一个失踪的学生,他们不会被计算在内(因为他们的种族没有被宣布)。” LEFT JOIN关键字返回左表(表1)中的所有行,右表(表2)中有匹配的行。当没有匹配项时,右侧的结果为空
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
因此,要使其工作,您应该使用右连接您将左连接原则与右连接混淆了。 这句话是错误的:“我使用的是左连接,因为有时我的学生信息表中可能有一个失踪的学生,他们不会被计算在内(因为他们的种族没有被宣布)。” LEFT JOIN关键字返回左表(表1)中的所有行,右表(表2)中有匹配的行。当没有匹配项时,右侧的结果为空
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
因此,要使其正常工作,您应该使用RIGHT JOIN仅尝试使用,按学生信息进行分组,并检查是否为null
SELECT ifnull(student_info.Ethnicity, 'not_declared'), COUNT(*)
FROM student_schedule LEFT JOIN student_info ON
student_schedule.ID=student_info.ID
WHERE student_schedule.Course LIKE 'AS%'
GROUP BY student_info.Ethnicity
ORDER BY COUNT(DISTINCT student_schedule.ID) DESC
SELECT ifnull(student_info.Ethnicity, 'not_declared'), (COUNT(*)/ (select count(*) FROM student_schedule LEFT JOIN student_info ON
student_schedule.ID=student_info.ID
WHERE student_schedule.Course LIKE 'AS%'))* 100
FROM student_schedule LEFT JOIN student_info ON
student_schedule.ID=student_info.ID
WHERE student_schedule.Course LIKE 'AS%'
GROUP BY student_info.Ethnicity
ORDER BY COUNT(DISTINCT student_schedule.ID) DESC
请尝试仅使用,按student_info.ethericity分组,并检查是否为空
SELECT ifnull(student_info.Ethnicity, 'not_declared'), COUNT(*)
FROM student_schedule LEFT JOIN student_info ON
student_schedule.ID=student_info.ID
WHERE student_schedule.Course LIKE 'AS%'
GROUP BY student_info.Ethnicity
ORDER BY COUNT(DISTINCT student_schedule.ID) DESC
SELECT ifnull(student_info.Ethnicity, 'not_declared'), (COUNT(*)/ (select count(*) FROM student_schedule LEFT JOIN student_info ON
student_schedule.ID=student_info.ID
WHERE student_schedule.Course LIKE 'AS%'))* 100
FROM student_schedule LEFT JOIN student_info ON
student_schedule.ID=student_info.ID
WHERE student_schedule.Course LIKE 'AS%'
GROUP BY student_info.Ethnicity
ORDER BY COUNT(DISTINCT student_schedule.ID) DESC
您误解了左连接的含义。我建议您阅读关于SO(最好的图形解释) 基本上,
LEFT JOIN
包含JOIN的第一个(左)表中的所有行,并连接第二个(右)表中匹配连接条件的行,或者如果第二个(右)表中没有匹配行,则添加NULL
列
如果要排除没有种族信息的行,则需要执行以下操作之一:
内部联接
(排除不匹配的行,在您的情况下,排除没有学生信息的学生)计数仍将正确进行。像这样(我使用[内部]连接):
您误解了左连接的含义。我建议您阅读关于SO(最好的图形解释)
基本上,LEFT JOIN
包含JOIN的第一个(左)表中的所有行,并连接第二个(右)表中匹配连接条件的行,或者如果第二个(右)表中没有匹配行,则添加NULL
列
如果要排除没有种族信息的行,则需要执行以下操作之一:
进行内部联接
(排除不匹配的行,在您的情况下,排除没有学生信息的学生)
在学生信息不为空的情况下,使用添加的条件进行右连接
这两种方法都将消除“空白”行,并且计数仍将正确进行。像这样(我使用[内部]连接):
有没有办法让结果占总结果的百分比?换句话说,SELECT语句是否可以在编写时考虑百分比?我想在SELECT语句中这样做,这样我就不必使用PHP.Wow进行翻译了!令人惊叹的。感谢您的帮助。scaisEdge第1行有来自的2。这是正确的还是错误的?我只更新了一个答案。。也是正确的,你能帮我让SELECT语句显示种族,占种族总数的百分比,占种族总数的百分比(不带WHERE student_Schedule.Course='AS%')。这样,我的结果就可以显示出占总在校人口百分比的学生人数。有没有办法让结果占总人数的百分比?换句话说,SELECT语句是否可以在编写时考虑百分比?我想在SELECT语句中这样做,这样我就不必使用PHP.Wow进行翻译了!令人惊叹的。感谢您的帮助。scaisEdge第1行有来自的2。这是正确的还是错误的?我只更新了一个答案。。也是正确的,你能帮我让SELECT语句显示种族,占种族总数的百分比,占种族总数的百分比(不带WHERE student_Schedule.Course='AS%')。这样,我的结果就可以显示有多少人的入学率占学校总人口的百分比。