gpt4 book ai didi

mysql - 如何编写mysql查询来返回比较同一个表的行的结果?

转载 作者:行者123 更新时间:2023-11-29 10:54:02 24 4
gpt4 key购买 nike

我有一个表结构,如下图所示。基本上,它有用户 ID,如 u1、u2,他们将在给定日期在给定考试中心/地点、给定类次(如类次 1、类次 2 等)进行 E1、E2 等考试。一天最多有 4 个类次轮类号从 1 到 4。

鉴于此表,我需要找出同一用户在同一日期和中心但连续轮类进行考试的行。例如,图像中突出显示的红色行,其中 U1 在同一中心但连续轮类进行两次检查,即 1 和 2。用户可能会在 4 个连续轮类中一天内最多进行 4 次检查。

我试图编写的另一个查询是,如果同一用户在同一日期但在不同的中心进行两次或多次考试。以蓝色突出显示的行。

enter image description here

最佳答案

请尝试...

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;

我解释您问题的方式是,您要求记录用户同一中心进行2次或更多考试同一日期。这向我表明,用户是最主要的因素,其中考试日期中心 考试 的>计数。因此,我的内部 SELECT 语句中的 GROUP BYCOUNT() 行。

其他三个选定字段之所以存在,部分原因是 GROUP BY 使用它们,因此要求它们成为 SELECT 的一部分,部分原因是需要它们来形成INNER JOINtblExams (我为您的数据表假设的名称)。 (注意:如果 JOIN 一词前面没有连接类型,则执行 INNER JOIN)。

INNER JOIN 在这里的作用是附加在该 日期考试中心 进行的考试的计数User 到相应的行上。

然后我们需要做的就是从 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 语句来获取每个用户在不同日期参加的考试中心列表>.

然后,最中间的 SELECT 语句会使用此数据来形成每个用户参加一次事件的中心数量的列表。他们在每个日期进行考试

最外层的 SELECT 使用此计数来仅返回 tblExams 中满足指定条件的行。

如果您有任何问题或意见,请随时发表评论。

关于mysql - 如何编写mysql查询来返回比较同一个表的行的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43290070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com