SELECT DISTINCT dept_id, sex
FROM employee;
dept_id|sex|
-------|---|
4|男 |
1|男 |
4|女 |
5|男 |
3|女 |
2|男 |
SELECT dept_id, sex
FROM employee
GROUP BY dept_id, sex;
-- 子查询
SELECT dept_id, emp_name,salary
FROM employee
WHERE (dept_id, salary) IN ( SELECT dept_id, MAX(salary)
FROM employee
GROUP BY dept_id );
dept_id|emp_name|salary |
-------|--------|--------|
1|刘备 |30000.00|
2|诸葛亮 |24000.00|
3|孙尚香 |12000.00|
4|赵云 |15000.00|
5|法正 |10000.00|
-- 窗口函数
WITH ranked_employee AS (
SELECT dept_id, emp_name, salary, ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) rn
FROM employee
)
SELECT *
FROM ranked_employee
WHERE rn = 1;
dept_id|emp_name|salary |rn|
-------|--------|--------|--|
1|刘备 |30000.00| 1|
2|诸葛亮 |24000.00| 1|
3|孙尚香 |12000.00| 1|
4|赵云 |15000.00| 1|
5|法正 |10000.00| 1|
SELECT DISTINCT ON (dept_id) dept_id, emp_name, salary
FROM employee
ORDER BY dept_id, salary DESC;
dept_id|emp_name|salary |rn|
-------|--------|--------|--|
1|刘备 |30000.00| 1|
2|诸葛亮 |24000.00| 1|
3|孙尚香 |12000.00| 1|
4|赵云 |15000.00| 1|
5|法正 |10000.00| 1|
WITH t AS (
SELECT 1 AS a, 1 AS b
UNION ALL
SELECT 1, 2
UNION ALL
SELECT NULL, 1
UNION ALL
SELECT NULL, NULL )
SELECT a, b, a = b "a=b"
FROM t;
a |b |a=b |
----|----|-----|
1 |1 |true |
1 |2 |false|
NULL|1 |NULL |
NULL|NULL|NULL |
SELECT 1 IS NULL "1 IS NULL",
1 IS NOT NULL "1 IS NOT NULL",
NULL IS NULL "NULL IS NULL",
NULL IS NOT NULL "NULL IS NOT NULL";
1 IS NULL|1 IS NOT NULL|NULL IS NULL|NULL IS NOT NULL|
---------|-------------|------------|----------------|
false |true |true |false |
WITH t AS (
SELECT 1 AS a, 1 AS b
UNION ALL
SELECT 1, 2
UNION ALL
SELECT NULL, 1
UNION ALL
SELECT NULL, NULL )
SELECT a, b,
(a IS NULL AND b IS NULL)
OR
(a IS NOT NULL AND b IS NOT NULL AND a = b) "a=b"
FROM t;
a |b |a=b |
----|----|-----|
1 |1 |true |
1 |2 |false|
NULL|1 |false|
NULL|NULL|true |
WITH t AS (
SELECT 1 AS a, 1 AS b
UNION ALL
SELECT 1, 2
UNION ALL
SELECT NULL, 1
UNION ALL
SELECT NULL, NULL )
SELECT a, b, a IS NOT DISTINCT FROM b "a=b"
FROM t;
a |b |a=b |
----|----|-----|
1 |1 |true |
1 |2 |false|
NULL|1 |false|
NULL|NULL|true |
SELECT dept_id, count(*), avg(salary), string_agg(emp_name, ',' ORDER BY salary DESC)
FROM employee
GROUP BY dept_id
ORDER BY dept_id;
dept_id|count|avg |string_agg |
-------|-----|----------------------|--------------------------------------|
1| 3| 26666.666666666667|刘备,关羽,张飞 |
2| 3|13166.6666666666666667|诸葛亮,黄忠,魏延 |
3| 2| 9000.0000000000000000|孙尚香,孙丫鬟 |
4| 9| 7577.7777777777777778|赵云,周仓,关兴,关平,赵氏,廖化,张苞,赵统,马岱|
5| 8| 5012.5000000000000000|法正,简雍,孙乾,糜竺,黄权,庞统,邓芝,蒋琬 |
SELECT dept_id, string_agg(sex, ','), string_agg(DISTINCT sex, ',') string_agg_distinct
FROM employee
GROUP BY dept_id
ORDER BY dept_id;
dept_id|string_agg |string_agg_distinct|
-------|-----------------------|-------------------|
1|男,男,男 |男 |
2|男,男,男 |男 |
3|女,女 |女 |
4|男,女,男,男,男,男,男,男,男|女,男 |
5|男,男,男,男,男,男,男,男 |男 |
原文作者:SQL编程思想;如有侵权,请联系管理员删除。