2013-09-10 4 views
20

Какой запрос будет подсчитывать количество строк, но отличается тремя параметрами?Подсчет различных пар значений в нескольких столбцах в SQL

Пример:

Id  Name  Address 
============================== 
1  MyName  MyAddress 
2  MySecondName Address2 

что-то вроде:

select count(distinct id,name,address) from mytable 
+0

Какая СУБД вы используете? –

+2

Поскольку вы включаете идентификатор, который, вероятно, является основным ключом, все подсчеты будут содержать до одного ... –

+2

id был примером ... плохой пример в любом случае – user1866731

ответ

22

Чтобы получить подсчет количества уникальных комбинаций id, name и address:

SELECT Count(*) 
FROM (
     SELECT DISTINCT 
       id 
      , name 
      , address 
     FROM your_table 
     ) As distinctified 
8

Получить все различные id, name и address столбцов и подсчета полученных строк.

SELECT COUNT(*) FROM mytable GROUP BY id, name, address 
+0

... не будет ли это возвращать одну строку для каждой группы? Возможно, я неправильно интерпретировал вопрос ... – gvee

+0

№ 'GROUP BY' просто группирует несколько строк с тем же значением в сгруппированном столбце в одной строке. Итак, если у вас есть 100 строк с одинаковым значением для 'name', да, он вернет одну строку, но если у вас есть 100 строк с 10 различными значениями для столбца' name' (и вы «GROUP BY name») , он будет возвращать 10 строк, каждый с отдельным именем. –

5

Другой (возможно, не готовый к производству или рекомендуется) метод, который я только что придумал это Concat значения в строку и посчитать эту строку своеобразнейше:

SELECT count(DISTINCT concat(id, name, address)) FROM mytable; 
0

Вы также можете сделать что-то вроде:

SELECT COUNT(DISTINCT id + name + address) FROM mytable 
Смежные вопросы