数据库(一):基本语法一

数据库第二次作业

姓名:~~~,学号:~~~,专业:~~~

2.66 书写SQL查询来获取以下结果:

A.星期五的 ChangeClose。
SELECT ChangeClose
FROM  NDX
WHERE TDayOfWeek = 'Friday';
B.星期五的最小、最大和平均 ChangeClose。
SELECT MIN(ChangeClose) as MinChangeClose,
       MAX(ChangeClose) as MaxChangeClose,
       AVG(ChangeClose) as AvgChangeClose,
FROM  NDX
WHERE  TDayOfWeek = 'Friday';
C.按照TYear分组的平均ChangeClose,同时显示TYear。
SELECT TYear,AVG(ChangeClose) as AvgChangeClose
FROM NDX
GROUP BY TYear;
D.按照TYear和TMonth分组的平均 ChangeClose,同时显示TYear 和 TMonth。
SELECT TYear, TMonth, AVG(ChangeClose) as AvgChangeClose
FROM NDX
GROUP BY TYear, TMonth;
E.按照TYear,TQuarter和TMonth分组的平均ChangeClose,要求按照平均值的降序排列(需要为该平均值赋予一个名称,以便按照它排序)。同时显示TYear,TQuarter和TMonth。注意月份是依字母序而不是日历序的。请说明需要怎么做才可以获得日历序的月份。
SELECT TYear, TQuarter, TMonth, AVG(ChangeClose) as AvgChangeClose
FROM (
    SELECT TYear, TQuarter, TMonth,
           DATEPART(MM, CONVERT(DATETIME, '01 ' + TMonth + ' 2000')) as MonthNumber,
           ChangeClose
    FROM NDX
) as SubQuery
GROUP BY TYear, TQuarter, MonthNumber
ORDER BY TYear, TQuarter, MonthNumber, AvgChangeClose DESC;

在这个查询中,我们首先创建了一个子查询,其中使用 DATEPARTCONVERT 函数将 TMonth 字段的字符串值转换为对应的数字。然后在主查询中,我们使用这个子查询的结果进行分组和排序。

CONVERT 函数将 TMonth 字段的值转换为日期类型,然后 DATEPART 函数提取出月份部分。这样,我们就得到了对应的月份数字,可以用来按照日历序排列月份。

F.按照 TYear、TQuarter 和TMonth 分组的最大 ChangeClose 和最小 ChangeClose 之同的差值,要求按照降序排列(需要为该差值赋予一个名称,以便按照它排序)。同时显示TYear,TQuarter 和 TMonth。
SELECT TYear, TQuarter, TMonth, MAX(ChangeClose) - MIN(ChangeClose) AS Difference
FROM NDX
GROUP BY TYear, TQuarter, TMonth
ORDER BY Difference DESC;
G.按照TYear 分组的平均ChangeClose,依降序排列(需要为该平均值赋予一个名称,以便按照它排序)。要求只显示平均值为正的分组。
SELECT TYear, AVG(ChangeClose) AS AverageChangeClose
FROM NDX
GROUP BY TYear
HAVING AVG(ChangeClose) > 0
ORDER BY AverageChangeClose DESC;
H.以年/月/日的形式显示一个单一的日期字段。不考虑结尾空白的情况。
SELECT CONCAT(TYear, '/', 
    CASE 
        WHEN TMonth = 'January' THEN '01'
        WHEN TMonth = 'February' THEN '02'
        WHEN TMonth = 'March' THEN '03'
        WHEN TMonth = 'April' THEN '04'
        WHEN TMonth = 'May' THEN '05'
        WHEN TMonth = 'June' THEN '06'
        WHEN TMonth = 'July' THEN '07'
        WHEN TMonth = 'August' THEN '08'
        WHEN TMonth = 'September' THEN '09'
        WHEN TMonth = 'October' THEN '10'
        WHEN TMonth = 'November' THEN '11'
        WHEN TMonth = 'December' THEN '12'
    END, 
'/', TDayOfMonth) AS FormattedDate
FROM NDX;

2.67交易量(交易的份额数)可能与证券市场的买卖方向有关。使用在本章学习的SQL来研究这种可能性并至少给出5个不同的SQL语句。

  1. 计算每天的总交易量和平均价格变动:
SELECT TYear, TMonth, TDayOfMonth, SUM(Volume) AS TotalVolume, AVG(ChangeClose) AS AverageChangeClose
FROM NDX
GROUP BY TYear, TMonth, TDayOfMonth;
  1. 计算每个月的总交易量和平均价格变动:
SELECT TYear, TMonth, SUM(Volume) AS TotalVolume, AVG(ChangeClose) AS AverageChangeClose
FROM NDX
GROUP BY TYear, TMonth;
  1. 查找交易量最大的一天:
SELECT TYear, TMonth, TDayOfMonth, SUM(Volume) AS TotalVolume
FROM NDX
GROUP BY TYear, TMonth, TDayOfMonth
ORDER BY TotalVolume DESC
LIMIT 1;
  1. 查找每个季度的平均交易量:
SELECT TYear, TQuarter, AVG(Volume) AS AverageVolume
FROM NDX
GROUP BY TYear, TQuarter;
  1. 查找总交易量超过10000的天数:
SELECT TYear, TMonth, TDayOfMonth, SUM(Volume) AS TotalVolume
FROM NDX
GROUP BY TYear, TMonth, TDayOfMonth
HAVING TotalVolume > 10000;

你可能感兴趣的:(数据库,sql)