gpt4 book ai didi

mysql - 计算用户 ID 是否存在于一个或另一个表中

转载 作者:行者123 更新时间:2023-11-29 06:51:53 24 4
gpt4 key购买 nike

我有三个(我继承了它们)表,一个用户表,一个类(class)表和一个测试表,我需要从中衡量用户的事件。例如,以下查询将使我获得其中一组中的用户数 -

SELECT COUNT(Users.ID), `CourseSessions`.`CourseID`
FROM `Users`
LEFT OUTER JOIN `CourseSessions`
ON `Users`.`ID` = `CourseSessions`.`UserID`
WHERE `Users`.`CredentialID` IN (2, 3)
AND `CourseSessions`.`CourseID` IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
AND `CourseSessions`.`TimeIn` BETWEEN '2012-06-01' AND '2012-12-31'
GROUP BY `CourseSessions`.`CourseID`;

结果是这样的-

COUNT, CourseID 
32 1
43 2
31 3
49 4
36 5
21 6
5 7
2 15

我可以将 CourseSessions 更改为另一组数字的 TestResults。当有人只是参加类(class)或参加考试时,问题就来了。

我需要做的是对一个用户进行一次计数,如果他们存在于一个或两个表中。鉴于以下 -

User     Course.courseID     Test.courseID
A 1
B 1 1
C 1

courseID 1 的计数应该是 3。

我已经看了几个小时了,我想也许我应该做一个 SUM...IF,但没有按预期工作。我试过子选择,但我最终得到的列太多了。总而言之,我已经非常了解这个车轴了。

一个用户的一条数据存在于两个表中,如何获取单个计数?

最佳答案

这应该给你你正在寻找的东西:

SELECT COUNT(CoursesTest.UserID), CourseID
FROM (
SELECT UserID, CourseID
FROM CourseSessions
WHERE TimeIn BETWEEN '2012-06-01' AND '2012-12-31'
-- extra filters on CourseSessions here
UNION

SELECT UserID, CourseID
FROM TestResults
-- extra filters on TestResults here
) AS CoursesTest
JOIN Users ON Users.ID = CoursesTest.UserID
WHERE
Users.CredentialID IN (2, 3)
AND CoursesTest.CourseID IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
GROUP BY CourseID

我认为如果您更早地对 CourseID 进行过滤,即在子查询中进行过滤,查询会更快一些。这意味着复制 IN 条件,但我认为 MySQL 不够聪明,无法以其他方式优化查询。

SELECT COUNT(CoursesTest.UserID), CourseID
FROM (
SELECT UserID, CourseID
FROM CourseSessions
WHERE TimeIn BETWEEN '2012-06-01' AND '2012-12-31'
AND CourseID IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
-- extra filters on CourseSessions here

UNION

SELECT UserID, CourseID
FROM TestResults
WHERE CourseID IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
-- extra filters on TestResults here

) AS CoursesTest
JOIN Users ON Users.ID = CoursesTest.UserID
WHERE Users.CredentialD IN (2, 3)
GROUP BY CourseID

关于mysql - 计算用户 ID 是否存在于一个或另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14860792/

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