mysql then end,MySQL:对多个内部联接表使用case when then end方法
时间: 2023-07-11 21:25:26 浏览: 101
可以使用以下语法对多个内部联接表使用 case when then end 方法:
```
SELECT
CASE
WHEN table1.column1 = 'value1' THEN 'result1'
WHEN table2.column2 = 'value2' THEN 'result2'
ELSE 'result3'
END AS result_column
FROM
table1
INNER JOIN table2 ON table1.column1 = table2.column1
INNER JOIN table3 ON table2.column2 = table3.column2;
```
在这个例子中,我们对三个表进行了内部联接,并在 SELECT 语句中使用了 case when then end 方法来根据每个表中的条件返回不同的结果。最终的结果将作为 result_column 列返回。你可以根据自己的需要修改条件和结果。
相关问题
使用mysql中SC表、course表、student表、teacher表按各科平均成绩进行排序,并显示排名,Score重复时保留名次空缺
在MySQL中,你可以使用SQL查询来实现这个需求,通常需要联接多个表并使用GROUP BY和ORDER BY语句。假设SC表存储学生选课信息,包含字段如student_id(学生ID),course_id(课程ID),score(分数),course_name(课程名称)。这里是一个基本的示例:
```sql
SELECT
c.course_name AS '科目',
AVG(sc.score) AS '平均分',
COALESCE(@row_number:=@row_number+1, 1) AS '排名'
FROM
SC sc
JOIN
course c ON sc.course_id = c.course_id
JOIN
(SELECT @row_number := 0) r
ORDER BY
AVG(sc.score) DESC,
CASE WHEN COUNT(*) > 1 THEN 0 ELSE NULL END ASC,
c.course_name;
```
在这个查询中:
- `JOIN` 子句连接了sc表、course表以及一个临时变量r,用于计算排名。
- `AVG(sc.score)` 计算每个课程的平均分数。
- `COALESCE(@row_number:=@row_number+1, 1)` 当score重复时,使用窗口函数`ROW_NUMBER()`来保持排名顺序,如果当前行的平均分与上一行相同,则使用`@row_number`加一;如果不是首次出现该平均分,就忽略前面的空缺。
- `ORDER BY` 首先按平均分降序排列,然后如果有平均分相同的课程,再按课程名称升序排列。
注意:`COALESCE` 和 `CASE WHEN` 的部分假设MySQL,因为不是所有数据库系统都支持`ROW_NUMBER()`, 如果你的环境不支持,可以考虑其他排序方式或者在应用层处理。
mysql 从另外一个放价格的表中按重量对应区间取值
假设您有两个表,一个表是放置重量区间的表(Weight_Range),另一个表是放置价格的表(Price_Table)。您可以使用 INNER JOIN 子句将这两个表联接起来,然后使用 CASE WHEN 子句来根据重量在不同的区间中选择相应的价格。以下是一个示例 SQL 代码:
```
SELECT Weight_Range.Weight_Low, Weight_Range.Weight_High,
CASE
WHEN Weight >= Weight_Low AND Weight <= Weight_High THEN Price
ELSE 0
END AS Price
FROM Price_Table
INNER JOIN Weight_Range
ON Price_Table.Weight BETWEEN Weight_Range.Weight_Low AND Weight_Range.Weight_High;
```
在这个例子中,我们使用 INNER JOIN 将两个表联接起来,并使用 BETWEEN 子句在 Weight_Range 表中找到对应的重量区间。然后,使用 CASE WHEN 子句根据重量在不同的区间中选择相应的价格。如果重量不在任何区间内,则选择价格为 0。
请注意,这只是一个示例代码,您需要根据您的表结构和实际情况做一些修改。
阅读全文