Таблица хитов:
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 |
Кто-либо знает, как получить это?
Select lid, count(distinct IP) as uhits
from hits
group by lid
SELECT lid, COUNT(DISTINCT IP)
FROM hits
GROUP BY lid
Вам нужно использовать группу по:
SELECT lid, count(*)
FROM Table
GROUP BY lid
Пока вы не начнете делать действительно сложные запросы, SQL сделан так, что он читается как естественное предложение. Поэтому, во-первых, если вы можете точно описать, что вы хотите получить от своего запроса, вы уже наполовину написали SQL.
В этом случае вы можете описать свою проблему так:
Получить
lid
и суммарное количество уникальныхIP
из моей таблицы для каждогоlid
.
Остается только перевести это, используя ключевые слова SQL. Важными здесь являются:
SELECT
COUNT
DISTINCT
SELECT <агрегатная функция>.... GROUP BY <поле>
Итак, ваше предложение выше начинает выглядеть так:
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