2010-05-14 2 views
9

Hits Таблица:Запрос MySQL для получения количества уникальных значений?

hid | lid | IP 
1 | 1 | 123.123.123.123 
2 | 1 | 123.123.123.123 
3 | 2 | 123.123.123.123 
4 | 2 | 123.123.123.123 
5 | 2 | 123.123.123.124 
6 | 2 | 123.123.123.124 
7 | 3 | 123.123.123.124 
8 | 3 | 123.123.123.124 
9 | 3 | 123.123.123.124 

Как вы можете видеть, есть следующие уникальные хиты для различных крышки:

lid 1: 1 unique hit 
lid 2: 2 unique hits 
lid 3: 1 unique hit 

Так в основном, мне нужен запрос, который будет возвращать следующее:

lid | uhits | 
1 | 1  | 
2 | 2  | 
3 | 1  | 

Кто-нибудь знает, как это получить?

ответ

19
Select lid, count(distinct IP) as uhits 
from hits 
group by lid 
+1

Я переформатировал ваш код, вставив в каждую строку 4 пробела. См. Справку по форматированию справа от экрана редактирования (и +1 для правильного ответа) – lexu

+0

+1 за хороший ответ (и вы тоже избили меня). Простите мое редактирование, но я взял на себя смелость удалить лишнюю (неуравновешенную) близкую скобку. –

-2

Вы должны использовать группу по:

SELECT lid, count(*) 
    FROM Table 
    GROUP BY lid 
+2

Это возвращает общее число обращений, а не уникальные хиты. –

6

Пока вы не начнете получать в очень сложные запросы SQL сделан так, он читает совсем как естественные предложения. Итак, во-первых, если вы можете точно указать, что вы хотите от своего запроса, вы уже наполовину написали SQL.

В этом случае, вы можете описать вашу проблему, как:

lid Получить и совокупный подсчет уникальных IP из моей таблицы для каждого lid.

Осталось только перевести это, используя ключевые слова SQL. Важными из них здесь являются:

  • получить ->SELECT
  • Количество ->COUNT
  • уникальный ->DISTINCT
  • aggregate..for каждого < поле > - >SELECT <aggregate function>..GROUP BY <field>

Итак, ваше предложение выше начинает выглядеть следующим образом:

lidSELECT и агрегатного COUNT из DISTINCTIPFROM моего стола GROUP BYlid.

Удаление ненужных слов, и очистка его использовать синтаксис SQL оставляет окончательный запрос:

SELECT hits.lid, COUNT(DISTINCT hits.IP) AS uhits 
FROM hits 
GROUP BY hits.lid 
+0

+1: Прежде всего, чтобы отправить ответ с правильным форматированием и без каких-либо ошибок. –

Смежные вопросы