@(一隻心中無碼的程序員)專欄程序員
- ~
查找薪水漲幅超過15次的員工號emp_no以及其對應的漲幅次數t
CREATE TABLE salaries
(emp_no
int(11) NOT NULL,salary
int(11) NOT NULL,from_date
date NOT NULL,to_date
date NOT NULL,
PRIMARY KEY (emp_no
,from_date
));函數
此題應注意如下四點: 一、用COUNT()函數和GROUP BY語句能夠統計同一emp_no值的記錄條數 二、根據題意,輸出的漲幅次數爲t,故用AS語句將COUNT(emp_no)的值轉換爲t 三、因爲WHERE後不可跟COUNT()函數,故用HAVING語句來限定t>15的條件 四、最後存在一個理解誤區,漲幅超過15次,salaries中相應的記錄數應該超過16(從第2條記錄開始算做第1次漲幅),不過題目爲了簡單起見,將第1條記錄看成第1次漲幅,因此令t>15便可 /** 注意: 嚴格來講,下一條salary高於本條纔算漲幅,但本題只要出現了一條記錄就算一次漲幅,salary相同能夠理解爲漲幅爲0,salary變少理解爲漲幅爲負 **/ 1 2 SELECT emp_no, COUNT(emp_no) AS t FROM salaries GROUP BY emp_no HAVING t > 15