[英]How to write a mysql query to return result comparing rows of same table?
请试试...
SELECT tblExams.srNum AS srNum,
tblExams.user_id AS user_id,
tblExams.exam_id AS exam_id,
tblExams.exam_date AS exam_date,
tblExams.exam_center_id AS exam_center_id,
tblExams.exam_shift as exam_shift
FROM tblExams
JOIN
{
SELECT user_id AS user_id,
exam_date AS exam_date,
exam_center_id AS exam_center_id,
COUNT( exam_center_id ) AS exam_center_id_count
FROM tblExams
GROUP BY user_id,
exam_date,
exam_center_id
} exam_center_counter ON tblExams.user_id = exam_center_counter.user_id
AND tblExams.exam_date = exam_center_counter.exam_date
AND tblExams.exam_center_id = exam_center_counter.exam_center_id
WHERE exam_center_counter.exam_center_id_count >= 2;
我对您的问题的解释方式是,您要查询user
the same date
在same center
进行2 or more exams
记录。 在我看来, User
是最主要的因素,在该Exam Date
之内,在各Centers
和Exams
count
之内。 因此,我内部的SELECT
语句中的GROUP BY
和COUNT()
行。
之所以存在其他三个选定字段,部分是因为GROUP BY
使用了它们,因此要求它们成为SELECT
一部分,一部分是因为需要它们与tblExams
一起形成INNER JOIN
(我为您的数据表假定的名称) 。 (注意:如果单词JOIN
前面没有JOIN
类型,则执行INNER JOIN
)。
INNER JOIN
的作用是将该User
在该Date
在该Exam Center
进行的考试数量附加到相应行上。
然后,我们要做的就是从tblExams
每一行中选择所有字段,该字段的计数至少为2
。
当我为您的第二个查询构造以下代码时,使用了这种逻辑的变体...
SELECT tblExams.srNum AS srNum,
tblExams.user_id AS user_id,
tblExams.exam_id AS exam_id,
tblExams.exam_date AS exam_date,
tblExams.exam_center_id AS exam_center_id,
tblExams.exam_shift as exam_shift
FROM tblExams
JOIN
{
SELECT user_id AS user_id,
exam_date AS exam_date,
COUNT( exam_center_id ) AS exam_center_count
FROM
{
SELECT user_id AS user_id,
exam_date AS exam_date,
exam_center_id AS exam_center_id
FROM tblExams
GROUP BY user_id,
exam_date,
exam_center_id
} exam_center_id_grouper
GROUP BY user_id,
exam_date
} exam_center_counter ON tblExams.user_id = exam_center_counter.user_id
AND tblExams.exam_date = exam_center_counter.exam_date
WHERE exam_center_counter.exam_center_count >= 2;
在此查询中,我使用最里面的SELECT语句获取每个User
在各个Dates
参加的Exam Centers
列表。
然后,最中间的SELECT
语句将使用此数据来形成一个列表,该列表列出了每个User
在每个DATE
参加Exam
Centers
。
最外面的SELECT
使用此计数来仅返回tblExams
中符合指定条件的那些行。
如果您有任何问题或意见,请随时发表评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.