SQL для вычисления различного количества для желаемой таблицы - PullRequest
0 голосов
/ 13 сентября 2010
id1     id2    year State Gender    
====  ====== ====== ===== =======    
1       A      2008    ca      M    
1       B      2008    ca      M    
3       A      2009    ny      F   
3       A      2008    ny      F     
4       A      2009    tx      F

Это таблица, которая у меня есть, мне нужно найти общее количество различных счетчиков в этой таблице Мне нужно рассмотреть id1 и id2, чтобы найти уникальный счетчик. поэтому результат подсчета должен быть сгруппирован по состоянию. учитывая приведенный выше пример.

i need to get the result as
ca - count : 2  and for ny it should be : 1 as  3 A is repeated twice.

запрос, который я задал, таков:

select state,gender,year,count(distinct id1,id2) from table1 
group by state,gender,year

в этом запросе я не смог вычислить различное количество id1, id2. Как я должен изменить свой запрос, чтобы получить желаемый результат. любая помощь будет оценена.

Ответы [ 5 ]

2 голосов
/ 13 сентября 2010

Если вы используете SQL Server 2005 или более поздней версии, вы можете использовать функции ранжирования.Например,

WITH temp AS(
    SELECT
        state,gender,[year],
        rank() OVER (ORDER BY id1,id2) AS rank1
    FROM table1
)
SELECT
    state,gender,[year],
    COUNT(DISTINCT rank1)
FROM 
    temp
GROUP BY state,gender, [year]

Другим грубым способом было бы объединить id1 и id2 и считать эту комбинацию

select
    state, gender, [year],
    count (distinct(cast(id1 as varchar(10)) + id2))
from
    try1
group by state, gender, [year]
0 голосов
/ 13 сентября 2010
SELECT [state],
  (SELECT COUNT(*) FROM (
    SELECT DISTINCT id1, id2 FROM table1 WHERE [state] = t.[state]
  ) z) AS cnt
FROM table1 t
GROUP BY [state]
0 голосов
/ 13 сентября 2010

[Обновлено]

Попробуйте выполнить следующее:

select state, count(distinct cast(id1 as varchar) + id2) cnt from table1 
group by state
0 голосов
/ 13 сентября 2010

Я не эксперт, но я взломал это, что, кажется, работает.Я здесь, чтобы учиться!

0 голосов
/ 13 сентября 2010

Попробуйте использовать дополнительный выбор:

select state, gender, year,
    count(select count(*) as total from table1
          where state = t.state and gender = t.gender and year = t.year
          group by id1, id2)
    from table1 t
group by state, gender, year
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...