Как выполнить КОЛИЧЕСТВО () или КОЛИЧЕСТВО (*)

У меня есть список тегов в базе данных.

Исключая:

villan
hero
spiderman
superman
superman

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

Исключая:

 SELECT hashtag.tag_name
      , COUNT( * ) AS number
   FROM hashtag 
  GROUP BY hashtag.tag_name
  ORDER BY hashtag.tag_name ASC

Это приводит к корректному результату:

 hero      , 1
 spiderman , 1
 superman  , 2
 villan    , 1

Как я могу получить полное КОЛИЧЕСТВО этого всего списка. Ответ должен быть 4 в этом случае, потому что существует естественно 4 строки. Я, может казаться, не получаю корректное КОЛИЧЕСТВО () без сбоя оператора.

Большое спасибо за справку!:)

5
задан lexu 27 May 2010 в 05:26
поделиться

4 ответа

SELECT COUNT(DISTINCT `tag_name`) FROM `hashtag`
6
ответ дан 14 December 2019 в 08:44
поделиться

Используйте COUNT DISTINCT(hashtag.tag_name) - он не может быть в том же SELECT, что и у вас (кроме UNION, конечно), но в SELECT собственном (или соответствующем UNION) он даст нужный вам результат.

1
ответ дан 14 December 2019 в 08:44
поделиться

Я не уверен насчет запроса в my-sql, но этот отлично работает с oracle.

SELECT hashtag.tag_name, count(*) FROM hashtag GROUP BY cube(hashtag.tag_name)
0
ответ дан 14 December 2019 в 08:44
поделиться

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

SELECT COUNT(*) AS uniquetags
FROM (SELECT hashtag.tag_name, COUNT( * ) AS number
      FROM hashtag GROUP BY hashtag.tag_name
      ORDER BY hashtag.tag_name ASC)

Конечно, предложение ORDER BY является ненужным и поглощается внешним агрегатом COUNT, как и внутренний COUNT.

Кроме того, как отметили несколько человек, короткий путь к этому - COUNT DISTINCT, как в:

SELECT COUNT(DISTINCT hashtag.tag_name)
FROM hashtag

Это может использовать или не использовать индексы более эффективно, в зависимости от того, понимает ли он, что ему не нужно считать все или нет. Если у кого-то больше знаний, пожалуйста, не стесняйтесь комментировать (или просто попробуйте сделать пару EXPLAINов).

0
ответ дан 14 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: