MySQL Query для получения количества уникальных значений?

Таблица хитов:

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     |

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

12
задан coderama 14 May 2010 в 06:43
поделиться

4 ответа

Select lid, count(distinct IP) as uhits
from hits
group by lid
22
ответ дан 2 December 2019 в 05:27
поделиться
SELECT lid, COUNT(DISTINCT IP)  
FROM hits  
GROUP BY lid
1
ответ дан 2 December 2019 в 05:27
поделиться

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

SELECT lid, count(*)
    FROM Table
    GROUP BY lid
-2
ответ дан 2 December 2019 в 05:27
поделиться

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

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

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

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

  • get -> SELECT
  • count -> COUNT
  • unique -> DISTINCT
  • aggregate...for each -> 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
7
ответ дан 2 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

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