Зависит от языка, поскольку могли бы быть некоторые небольшие семантические различия, но идея состоит в том, что он будет выполняться (почти) всегда, даже если код в блоке попытки выдал исключение.
Во втором примере, если код в возвратах блока выгоды или выходах, x = 3 не будет выполняться. В первом это будет.
В платформе.NET, в некоторых случаях выполнение наконец блок не произойдет: Исключения безопасности, приостановки Потока, Компьютерное закрытие:), и т.д.
select count(*) from (select distinct * from MyTable) as T
Хотя я настоятельно Предлагаем вам переосмыслить любые запросы, в которых используется DISTINCT
. В большом проценте случаев GROUP BY
более подходит (и быстрее).
EDIT: Прочитав комментарии к вопросу, я должен указать, что вы не должны никогда просят СУБД сделать больше работы, чем необходимо для получения результата. Если вы заранее знаете, что в таблице не будет повторяющихся строк, не используйте DISTINCT
.
Вы действительно можете.
Однако, если у вас есть идентификатор, у вас не будет полностью отдельных строк. Но вы могли бы сделать, например:
SELECT COUNT(DISTINCT SenderID) FROM Messages
Вы можете выбрать все столбцы в таблице и сгруппировать их по ...
SELECT column1, column2, column3, count(*)
FROM someTable
GROUP BY column1, column2, column3
почему бы и нет?
select
count(distinct name)
from
people
COUNT (*) - количество строк, соответствующих запросу.
Строка содержит уникальную информацию, такую как rowid. Все строки по определению различны.
Вместо этого вы должны подсчитать отдельные экземпляры значений в каком-либо поле.
Вы можете попробовать CTE в Sql Server 2005
;WITH cte AS (
SELECT DISTINCT Val1,Val2, Val3
FROM @Table
)
SELECT COUNT(1)
FROM cte
Чтобы ответить на вопрос, From документация
Указывает, что все строки должны быть подсчитано, чтобы вернуть общее количество строк в таблице. COUNT () не принимает параметры и не могут использоваться с ОТЛИЧИТЕЛЬНЫЙ. COUNT () не требует параметр выражения, потому что определение, он не использует информация о каком-либо конкретном столбец. COUNT (*) возвращает количество строк в указанной таблице без избавление от дубликатов. Это считается каждый ряд отдельно. Это включает в себя строки, содержащие нулевые значения.
некоторые языки могут быть не в состоянии обрабатывать «отдельный *», поэтому, если вы хотите, чтобы различие проводилось по множеству столбцов, вы можете использовать «отдельный столбецA || Столбец B ', объединяющий значения, прежде чем судить, отличаются ли они. Обратите внимание на то, являются ли ваши переменные числовыми и может ли обработчик базы данных выполнять автоматическое приведение типов к символьным строкам.
UberKludge и может быть специфичным для postgre, но
select count( distinct table::text ) from table