我有两个表:
tbl student :
.................
id | Name |Age |
.................
1 | A |15 |
2 | B |13 |
3 | C |12 |
.................
另一个表格,例如Tbl_student_details:
.......................
id | stud_id |section |
.......................
1 | 1 |A |
2 | 1 |B |
3 | 2 |C |
.......................
Result Expected:
Active student : count (2) because id 1 and 2 have records in student detail table
Inactive Student :count(1) dont have any record in student detail table
我需要得到的是我想要活跃或不活跃的学生..
如果任何学生在student_details中都有记录,则需要这些学生和不活跃学生的计数 哪个学生在学生详细信息表中没有记录,我需要对那些学生以及不活跃的学生进行计数 我怎么才能让这个活跃和不活跃的学生有任何想法,我需要在laravel DB :: raw中查询,如果不可能的话,建议我查询pleae来帮助我解决这个问题。
答案 0 :(得分:1)
student
表的所有学生,您将需要使用Left Join
,这样即使Tbl_student_details
表中没有匹配的行,您也将仍然考虑所有学生。Count()
功能对不活跃/活跃学生进行计数。 Count()
函数不计算NULL
个值;因此我们可以使用Case .. When
表达式来计算不活跃学生的人数(NULL
由于行不匹配)。Count(Distinct ..)
,因为您在stud_id
表中的Tbl_student_details
有重复的行。尝试以下查询:
SELECT
COUNT(CASE WHEN tsd.id IS NULL THEN 1 END) AS Inactive_students,
COUNT(DISTINCT tsd.stud_id) AS Active_students
FROM
student AS ts
LEFT JOIN
Tbl_student_details AS tsd ON tsd.stud_id = ts.id
答案 1 :(得分:0)
您可以尝试使用左联接和CASE WHEN
select
s.id,
s.`Name`,
s.`Age`, case when sd.stud_id is null then 'In Active' else 'Active' end as `StudentStatus`
from student s left join student_details sd
on s.id=sd.stud_id
答案 2 :(得分:0)
通过将student_details表与student表保持连接,可以使用groupBy id来获取每个ID的计数。
DB::table('student')
->leftJoin('Tbl_student_details ', 'student.id', '=', 'Tbl_student_details .id')
->groupBy('student.id')->count();
答案 3 :(得分:0)
使用laravel,您可以为表格设置模型
class Student extends Model
{
protected $table = 'student';
public function details()
{
return $this->hasMany('App\StudentDetails');
}
}
class StudentDetails extends Model
{
protected $table = 'student_details';
public function student()
{
return $this->belongsTo('App\Student');
}
}
通过查询buider,您可以将计数计为
$students = App\Student::withCount('details')->get();
以上将返回所有学生以及属性“ details_count”,该属性将为您提供相关表格中所需的计数
对于活跃/不活跃的学生,您可以写为
$activeStudents = App\Student::has('details')->count();
$inActiveStudents = App\Student::doesntHave('details')->count();