SQL-запрос - нужна базовая помощь - PullRequest
1 голос
/ 03 апреля 2010

Мне нужна базовая справка по TSQL. Вот мой макет стола:

Заказы Таблица

  • ПЛА
  • ZipCode

ZipLookup Таблица

  • ZipCode
  • Состояние

Все столбцы - varchars.

Как бы я получить список штатов с количеством отдельных номеров SSN в каждом штате? Предпочтительно, если конкретный SSN имеет заказы из нескольких штатов, для этого SSN будет учитываться только состояние с наибольшим количеством заказов.

Спасибо за любые советы, которые вы можете дать мне.

1 Ответ

4 голосов
/ 03 апреля 2010

Прежде всего, вам лучше убедиться, что вам разрешено хранить 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

Производительность не будет очень хорошей, я думаю, что для этого потребуется как минимум одно полное сканирование и, возможно, два, но если вы хотите что-то лучше, вам нужно нормализовать схему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...