Счетчик SQL (*) и отдельный

Почему мы не можем использовать count(distinct *) в SQL? Как и для подсчета всех различных строк?

Ответы

Ответ 1

select count(*) from (select distinct * from MyTable) as T

Хотя я настоятельно рекомендую вам пересмотреть любые запросы, которые используют DISTINCT. В большом проценте случаев GROUP BY более уместен (и быстрее).

РЕДАКТИРОВАТЬ: Прочитав комментарии к вопросу, я должен указать, что вы должны никогда запрашивать у СУБД больше работы, чем нужно, чтобы получить результат. Если вы заранее знаете, что в таблице не будет повторяющихся строк, не используйте DISTINCT.

Ответ 2

Вы можете выбрать все столбцы в таблице и группе с помощью...

SELECT column1, column2, column3, count(*)
FROM someTable
GROUP BY column1, column2, column3

Ответ 3

почему бы и нет?

select 
  count(distinct name)
from 
  people

Ответ 4

Вы действительно можете.

Если у вас есть идентификатор, у вас не будет никаких отдельных строк. Но вы могли бы сделать, например:

SELECT COUNT(DISTINCT SenderID) FROM Messages

Ответ 5

Вы можете попробовать CTE в Sql Server 2005

;WITH cte AS (
        SELECT  DISTINCT Val1,Val2, Val3
        FROM    @Table
)
SELECT  COUNT(1)
FROM    cte

Чтобы ответить на вопрос, из документации

Указывает, что все строки должны быть подсчитывается, чтобы вернуть общее количество строки в таблице. COUNT() не принимает параметры и не могут использоваться с DISTINCT. COUNT() не требует параметр выражения, поскольку определения, он не использует информация о любых конкретных колонка. COUNT (*) возвращает количество строк в указанной таблице без избавление от дубликатов. Он считает каждая строка отдельно. Это включает строки, содержащие нулевые значения.

Ответ 6

COUNT (*) - количество строк, соответствующих запросу.

Строка содержит уникальную информацию, такую ​​как rowid. Все строки по определению отличаются.

Вместо этого вы должны учитывать разные экземпляры значений в некотором поле.

Ответ 7

некоторые языки не могут обрабатывать "отличные *", поэтому, если вы хотите, чтобы различие было сделано через многие столбцы, вы можете использовать "отличную ColumnA || ColumnB ', объединяя значения, прежде чем судить, отличаются ли они. Помните, являются ли ваши переменные числовыми, и ваш обработчик базы данных может сделать автоматический типный вывод символьным строкам.

Ответ 8

UberKludge, и может быть postgre specific, но

select count( distinct table::text ) from table

Ответ 9

select count (Tag_no) from tab_raw_tag_value where tag_no in (select distinct tag_no from tab_raw_tag_value)