dept_id | course_id | 學生卡 |
---|---|---|
CS | 101 | 11 |
數學 | 101 | 11 |
CS | 101 | 12 |
CS | 201 | 22 |
數學 | 301 | 22 |
EE | 102 | 33 |
數學 | 201 | 33 |
這是當前名為“已注冊”的 sql 表,我需要選擇所有注冊人數最多的部門。
我試過了
SELECT dept_id,COUNT(dept_id) as "enrollments"
FROM enrolled
GROUP BY dept_id;
獲取每個部門的入學人數。但是我不確定如何讓所有部門獲得最大的入學率。
最終結果應該是帶有“CS”和“Math”的單列。
uj5u.com熱心網友回復:
您可以使用DENSE_RANK
函式根據注冊學生的數量為每個部門提供排名,如下所示:
SELECT dept_id
FROM
(
SELECT dept_id, DENSE_RANK() OVER (ORDER BY COUNT(*) DESC) rnk
FROM enrolled
GROUP BY dept_id
) T
WHERE rnk=1
查看演示。
uj5u.com熱心網友回復:
如果您有不支持 windows 功能的舊 MySQL 版本,您可以使用 HAVING COUNT 子句
select dept_id
from enrolled
group by dept_id
having count(dept_id) = ( select max(tot_count)
from ( select count(dept_id) as tot_count
from enrolled
group by dept_id
) tbl
);
https://dbfiddle.uk/sNcMzVxe
以下查詢將回傳最大計數,然后在 have 子句中使用
select max(tot_count)
from ( select count(dept_id) as tot_count
from enrolled
group by dept_id
) tbl
簡而言之,在您的情況下,它將是having count(dept_id) = 3;
uj5u.com熱心網友回復:
- 首先,您需要根據每個部門計算總分,我們在 CTE 1 中使用
GROUP BY
- 那么你需要根據最高分(降序)創建一個排名,如果分數可以并列,你需要創建一個基于
DENSE_RANK()
. 這將始終為相同的值生成相同的排名,在您的情況下,它正在查看步驟 1 中的 total_scores,以最高的 oder (ORDER BY
設定為desc
)。如果您想以其他方式進行查詢,您可以洗掉DESC
,默認情況下,視窗功能將按ASC
順序作業 - 最后,您使用子句過濾 rank = 1
where
以獲得最高注冊部門
with main as (
select dept_id, count(student_id) as total_enrolled_students
from enrolled
group by 1
),ranking as (
select *,
dense_rank() over(order by total_enrolled_students desc) as rank_
from main
)
select * from ranking where rank_ = 1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/526378.html
標籤:mysqlsql