SQL面试题

157 阅读1分钟

1.第一题,有以下数据

yearseasonmoney
2008s1100
2008s22
2009s187
2010s170
2010s2238
2010s333
2011s4435

需求1:写一个SQL统计money字段求和小于300得年份

select year from table group by year having sum(money)<300;

需求2:写一个SQL实现一下查询结果(不限制SQL语法):

years1s2s3s4
2008100200
200987000
201070238330
2011000435
SELECT
 year,
 ifnull(SUM(
  CASE
  WHEN season = 's1' THEN
   money
  END
 ),0) AS s1,
 ifnull(sum(
  CASE
  WHEN season = 's2' THEN
   money
  END
 ),0) AS s2,
 ifnull(sum(
  CASE
  WHEN season = 's3' THEN
   money
  END
 ),0) AS s3,
 ifnull(sum(
  CASE
  WHEN season = 's4' THEN
   money
  END
 ),0) AS s4
FROM
 my_test
GROUP BY
 year

第二题

yeardept
2008dev
2008sale
2009dev
2010hr
2010man
2010market
2011service

需求:写一个SQL实现以下查询结果(不限制SQL语法):

yeardept
2008dev,sale
2009dev
2010hr,man,market
2011service
SELECT
 year,
 GROUP_CONCAT(dept) AS dept
FROM
 table
GROUP BY
 year;