SQL查询 - 需要一些基本的帮助

时间:2010-04-02 21:49:39

标签: sql tsql

我需要一些基本的TSQL帮助。这是我的表格布局:

订单

  • SSN
  • 邮编

ZipLookup

  • 邮编
  • 国家

所有列都是varchars。

我如何获得每个州中具有不同SSN数量的州名单?优选地,如果特定SSN具有来自多个州的订单,则仅针对该SSN计数具有最多订单的州。

感谢您提供的任何建议。

1 个答案:

答案 0 :(得分:4)

首先,您最好确保允许您存储SSN,因为有一大堆隐私法律和法规可能会禁止它。

查询如下所示:

SELECT z.State, COUNT(DISTINCT o.SSN) AS SsnCount
FROM ZipLookup z
INNER JOIN Orders o
    ON o.ZipCode = z.ZipCode
GROUP BY z.State

如果您只需要在最常用的状态下统计SSN:

WITH StateSSNs AS
(
    SELECT
        o.SSN, z.State,
        ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) AS RowNum
    FROM Orders o
    INNER JOIN ZipLookup z
        ON z.ZipCode = o.ZipCode
    GROUP BY o.SSN, z.State
)
SELECT z.State, COUNT(*) AS SsnCount
FROM ZipLookup z
INNER JOIN StateSSNs s
    ON s.State = z.State
WHERE s.RowNum = 1
GROUP BY z.State

性能不会很好,我认为这需要至少一次完整扫描,可能需要两次,但如果你想要更好的东西,那么你需要规范化架构。