Book Image

Data Analysis Using SQL and Excel - Second Edition

By : Gordon S. S. Linoff
Book Image

Data Analysis Using SQL and Excel - Second Edition

By: Gordon S. S. Linoff

Overview of this book

Data Analysis Using SQL and Excel, 2nd Edition shows you how to leverage the two most popular tools for data query and analysis—SQL and Excel—to perform sophisticated data analysis without the need for complex and expensive data mining tools. Written by a leading expert on business data mining, this book shows you how to extract useful business information from relational databases. You'll learn the fundamental techniques before moving into the "where" and "why" of each analysis, and then learn how to design and perform these analyses using SQL and Excel. Examples include SQL and Excel code, and the appendix shows how non-standard constructs are implemented in other major databases, including Oracle and IBM DB2/UDB. The companion website includes datasets and Excel spreadsheets, and the book provides hints, warnings, and technical asides to help you every step of the way. Data Analysis Using SQL and Excel, 2nd Edition shows you how to perform a wide range of sophisticated analyses using these simple tools, sparing you the significant expense of proprietary data mining tools like SAS.
Table of Contents (18 chapters)
Free Chapter
1
Foreword
17
EULA

Window Functions

Window functions are a very powerful part of the SQL language. They are often the most efficient way to solve problems—this is especially true when the window function is the “natural” method for doing a calculation. They can also be used in clever ways.

Where Window Functions Are Appropriate

What proportion of a state's population lives in each zip code? This query can be answered using “traditional” SQL using a join and an aggregation:

SELECT zc.zcta5, zc.TotPop / s.StatePop
FROM ZipCensus zc JOIN
     (SELECT zc.Stab, SUM(1.0 * zc.TotPop) as StatePop
      FROM ZipCensus zc
      GROUP BY zc.Stab
     ) s
     ON zc.Stab = s.Stab

Although readily expressed in traditional SQL, this is not the best way to answer this question.

One problem with this approach is evident if filtering is needed. Say we were to add a WHERE clause to choose a single state: WHERE stab = 'MA'. The subquery would still process the data for all...