在数据分析领域,SQL是一种被广泛使用的技能。全球的分析师都依赖于SQL来进行他们的分析工作。本文将介绍使用SQL进行数据分析的基础知识。
排序关键字ORDER BY用于根据特定列的值对记录进行排序。它允许将记录按升序和降序排列。例如,假设有一个名为“订单”的表,其中包含了销售记录。让查看这个表中的数据。
SELECT * FROM 订单 LIMIT 10;
输出结果将如下所示:该表包含了买家(USER_ID)、他们购买的产品(PRODUCT_ID)、消费金额(SUBTOTAL和TOTAL)、数量以及购买日期等信息。
让将这些记录按照消费金额降序排列,这样最高消费的订单就会排在最上面,而较小的订单则会排在下面。将使用ORDER BY和DESC关键字来实现这一点。
SELECT * FROM 订单 ORDER BY Total DESC;
输出结果将如下所示:现在记录已经按照订单总额的降序排列。如果想查看按升序(升序)排列的记录,可以使用ASC关键字后跟ORDER BY。或者,可以省略ASC关键字,SQL默认会按升序排列记录。
GROUP BY语句用于根据特定列的值对记录进行分组。例如,可以将所有特定用户的记录分组在一起,然后在上面使用聚合函数(SUM、AVG、COUNT、MAX、MIN)。
让尝试查看每个用户的平均订单价值。将使用GROUP BY语句和AVG函数来实现这一点。同时,将它们按照平均订单价值的降序排列。
SELECT User_id, AVG(Total) AS "平均订单价值" FROM 订单 GROUP BY User_id ORDER BY AVG(Total) DESC;
输出结果将如下所示:可以看到平均订单价值最高的用户排在最上面。
聚合函数经常与GROUP BY语句一起使用。让再看一个例子来更好地理解。让看看每个用户下了多少订单。为此,将使用GROUP BY语句和COUNT函数。
SELECT User_id, COUNT(*) AS "订单数量" FROM 订单 GROUP BY User_id;
COUNT(*)将计算与每个USER_ID相关的记录数量。输出结果将如下所示:可以看到与每个用户相关的订单数量。
SQL中的JOIN允许根据共同的列(字段)连接两个或多个表。JOIN非常有用,因为它们帮助将多个表中的数据合并到单个输出中。让用一个例子来理解这一点。
订单表包含了客户的订单信息。产品表包含了不同产品的信息。让连接这两个表。
SELECT User_id, Total, Discount, Product_id, Vendor, Price, Rating FROM 订单 JOIN 产品 ON 订单.Product_id = 产品.id;
JOIN子句允许将订单表与产品表连接在共同的列上。ON子句让指定应该在哪些列上连接表。
输出结果将如下所示:可以看到订单表已经与产品表连接。可以看到来自两个表的列一起出现在单个输出中。
还可以将JOIN与GROUP BY语句或ORDER BY关键字结合起来,进行更有意义的分析。让看一个例子。
将查看不同用户花费的总金额,以及他们购买的产品的总成本。然后将记录按照用户花费的总金额降序排列。
SELECT User_id, SUM(Total) AS "总花费", SUM(Price) AS "总成本", AVG(Rating) AS "平均评分" FROM 订单 JOIN 产品 ON 订单.Product_id = 产品.id GROUP BY User_id ORDER BY SUM(Total) DESC;
输出结果将如下所示:已经将订单和产品两个表结合起来,然后在同一查询中使用了GROUP BY语句和ORDER BY来查看不同用户花费的总金额和购买的产品的总成本。
连接查询可以用多种方式使用,以解决不同的业务用例。SQL中有5种主要的连接类型。
来源:
WHERE语句帮助根据列中的值过滤记录。让看一个例子来看看它是如何工作的。将查看总金额超过100的订单。
SELECT * FROM 订单 WHERE Total > 100;
输出结果将如下所示:结果只包含总金额超过100的订单。
LIKE操作符与WHERE语句一起使用,用于在列中查找模式。还可以与LIKE操作符一起使用通配符(如%和_)。%符号代表0个或多个字符。_符号代表恰好1个字符。
如果想过滤包含“鞋子”的产品名称的记录,可以使用LIKE操作符。
SELECT * FROM 产品 WHERE Title LIKE '%Shoes%';
输出结果将如下所示:所有记录的标题中都包含“鞋子”。LIKE操作符在列包含字符串值时非常有用。
AND和OR操作符用于组合多个条件。例如,如果想过滤包含鞋子的产品标题且价格低于50的记录,可以使用AND操作符。
SELECT * FROM 产品 WHERE Title LIKE '%Shoes%' AND Price < 50;
这将过滤出产品标题包含鞋子且价格低于50的记录。输出结果只包含同时满足这两个条件的记录。输出结果将如下所示:
输出结果只包含3条记录。好吧,猜怎么着,鞋子很贵!
如果想过滤价格低于25或评分高于4.5的记录,可以使用OR操作符。
SELECT * FROM 产品 WHERE Price < 25 OR Rating > 4.5;