MySQL Query, чтобы получить количество уникальных значений? - PullRequest
11 голосов
/ 14 мая 2010

Таблица попаданий:

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     |

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

Ответы [ 4 ]

21 голосов
/ 14 мая 2010
Select lid, count(distinct IP) as uhits
from hits
group by lid
7 голосов
/ 14 мая 2010

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

В этом случае вы можете описать свою проблему следующим образом:

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

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

  • get -> SELECT
  • count -> COUNT
  • уникальный -> DISTINCT
  • агрегат..для каждого -> SELECT <aggregate function>..GROUP BY <field>

Итак, ваше предложение выше начинает выглядеть так:

SELECT lid и совокупность COUNT из DISTINCT IP FROM моего стола GROUP BY lid.

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

SELECT hits.lid, COUNT(DISTINCT hits.IP) AS uhits
FROM hits
GROUP BY hits.lid
1 голос
/ 14 мая 2010
SELECT lid, COUNT(DISTINCT IP)  
FROM hits  
GROUP BY lid
0 голосов
/ 14 мая 2010

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

SELECT lid, count(*)
    FROM Table
    GROUP BY lid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...