SQL 部分函式的使用,子查詢,group by,虛擬欄位,case……

景上發表於2016-06-01
--1/顯示面積小於倉庫平局面積的倉庫資訊:
SELECT 面積 FROM 倉庫 WHERE 面積<(SELECT AVG(面積) FROM 倉庫);


--2/統計性別為女,工資大於1500的職工人數:
SELECT COUNT(*) FROM 職工 WHERE sex='女' AND 工資>1500;

--3/顯示倉庫表中有多少個倉庫號:
SELECT COUNT(倉庫號) FROM 倉庫;

--4/顯示不重複倉庫號的個數:  ORACLE中的count()函式只能用於number資料型別;
SELECT COUNT(DISTINCT(倉庫號)) FROM 倉庫;

--5/顯示使用員工的工資總和;
SELECT SUM(工資) FROM 職工;

--6/顯示w1倉庫號的工資總和;
SELECT SUM(工資) FROM 職工 WHERE 倉庫號='w1';

--7/顯示上海地區的工資總和;
  ---先在倉庫表中查詢出屬於上海地區的倉庫號;
SELECT SUM(工資) FROM 職工 WHERE 倉庫號 IN (SELECT 倉庫號 FROM 倉庫 WHERE 城市='上海');

--8/顯示w1倉庫中工資大於1500的職工的平均工資;先求出符合條件的工資總和、職工人數,再求值;
SELECT SUM(工資)/COUNT(*) FROM 倉庫 WHERE 倉庫號='w1' AND 工資>1500;

--9/顯示工資大於平均工資的職工的總人數、工資總和;
SELECT COUNT(*),SUM(工資) FROM 職工 WHERE 工資>(SELECT SUM(工資)/COUNT(*) FROM 職工);

--10、顯示評語資訊,如果最大工資與最小工資之差超過200,則評語為“工資差別大”,否則為“工資差別小”;
SELECT MAX(工資)-MIN(工資) AS 工資差,工資評語=
  CASE 
    WHEN MAX(工資)-MIN(工資)>200 THEN "工資差別大"
    ELSE "工資差別小"
  END
FROM 職工 ;

--11/顯示工資大於倉庫號為W1中最大工資的職工資訊;
SELECT * FROM 職工 WHERE 工資>(SELECT  MAX(工資) FROM 職工 WHERE 倉庫號='W1');

--12/顯示除了工資最高、最低的職工的所有資訊;
SELECT * FROM 職工 WHERE 工資 NOT IN ((SELECT MAX(工資) FROM 職工),(SELECT MIN(工資) FROM 職工));

--13、新增平均工資虛擬欄位:  每一個記錄後面都新增一個值相同的欄位;
SELECT *,AVG(工資) AS 平均工資 FROM 職工;

--14、顯示職工工資與其對應的倉庫的平均工資之差:
  --先按倉庫分組,並求出各組的平均值,以此結果為一個表,命名為aaa;
  --以表aaa和表fruits(別名為ff)結合查詢,用倉庫號關聯;
select ff.*,aaa.平均工資,ff.工資-aaa.平均工資 
from 職工 as ff,(select 倉庫號,avg(工資) as 平均工資 from 職工 group by 倉庫號) as aaa 
where ff.倉庫號=aaa.倉庫號


--15/顯示面積最大和麵積最小的職工資訊;
select * from 職工 
where 倉庫號 in (select 倉庫號 from 倉庫 where 面積 in ((select max(面積) from 倉庫),(select min(面積) from 倉庫)))

書籍上的學習筆記

相關文章