小编Man*_*265的帖子

相当于 MySQL 中的公共表表达式 (CTE)

我有一个在 Microsoft SQL 服务器中运行的查询,它运行良好。它使用了 CTE,因为我加入了三个表。内部查询中的前两个,然后是外部查询。然而,当我在我的网络服务器上尝试这个时,它只安装了 MySQL,我无法运行查询。有什么方法可以使用该结构运行查询吗?这是一个示例:

USE UNAMupdates;
with CTE as
( SELECT tbl_modules.module_code
FROM tbl_student
 JOIN tbl_modules ON tbl_student.registration_year = tbl_modules.registration_year
WHERE tbl_student.student_number='1002')

SELECT tbl_notifications.module_name,tbl_notifications.message,tbl_notifications.staff_username,tbl_notifications.date_time 
FROM CTE JOIN tbl_notifications
ON cte.module_code = tbl_notifications.module_code
ORDER BY tbl_notifications.date_time DESC
Run Code Online (Sandbox Code Playgroud)


我想要实现的是查询单个学生选择的所有模块/主题,然后找出该主题是否有任何通知/新闻项目可用。

mysql sql-server cte

7
推荐指数
1
解决办法
2万
查看次数

如何以及何时在我的 SQL 语句中使用别名

我有一个查询,我在其中进行了一些计算,然后为该列指定了别名。在下一列中,我想在 IF 语句中使用该计算的结果。当我将别名用作条件时,MySQL 无法识别它,而是要求我重写整个查询,在它周围放置一些括号,然后执行条件检查。
这是 SQL 查询:

SELECT StudentId
    ,SubjectID
    , (COUNT(StudentId) / (
        SELECT COUNT(SubjectID) 
        FROM lectureattendancein 
        WHERE SubjectID ='MIS4' ) * 100) AS Percentage
    , IF((COUNT(StudentId) / (
        SELECT  COUNT(SubjectID) 
        FROM lectureattendancein  
        WHERE SubjectID ='MIS4' 
        )* 100) >= 80, 'ALLOWED', 'NOT ALLOWED') AS ExamAdmit
FROM attendancein 
GROUP BY StudentId, SubjectID 
HAVING SubjectID='MIS4' 
ORDER BY StudentId ASC
Run Code Online (Sandbox Code Playgroud)

我想在 IF 语句中使用名为Percentage的列别名

mysql alias

5
推荐指数
2
解决办法
2128
查看次数

如何在 WHERE 子句中使用具有 RANK() OVER 的别名

我有一个查询,其中包含一个RANK() OVER函数,但我想在后面的 WHERE 子句中使用此列上显示的结果。我怎么写,因为我看过的所有其他问题都没有,RANK() OVER而且似乎更容易做到。这是声明:

USE SMSResults


SELECT Student_No,Result,Module_Name,Semester,Year,RANK() OVER (PARTITION BY Student_No ORDER BY Semester  DESC) AS Rnk
FROM tbl_results
WHERE Student_No = '201409'

ORDER BY Year DESC
Run Code Online (Sandbox Code Playgroud)

我想使用子句中的RnkWHERE

sql-server window-functions sql-server-2014

2
推荐指数
1
解决办法
7862
查看次数

在 WHERE 子句中使用日期时间列的 DATE 部分

我正在构建一个 POS 系统,在那里我收集事件发生的日期和时间。我想通过DATE在我的 SQL 查询中仅使用datetime 列的一部分来提取一些报告。

我当前的查询如下所示:

SELECT * FROM tbl_item_trans
WHERE  (date_time BETWEEN @start AND @end)
ORDER BY date_time DESC, code
Run Code Online (Sandbox Code Playgroud)

但是,如果我输入两个日期,例如 9 月 14 日和 15 日,它只会从 14 中提取数据。如果我想包括 9 月 15 日的交易,结束日期必须是 9 月 16 日。

我怎么解决这个问题?如果我只使用专栏的DATE一部分,那就更好了datetime

@start@end变量使用date的数据类型,例如“2017年9月16日”。

sql-server date where

1
推荐指数
1
解决办法
1660
查看次数