MySQL Query获取唯一值的计数?

cod*_*ama 12 mysql database

命中表:

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
Run Code Online (Sandbox Code Playgroud)

如您所见,以下是各种盖子的独特命中:

lid 1: 1 unique hit
lid 2: 2 unique hits
lid 3: 1 unique hit
Run Code Online (Sandbox Code Playgroud)

基本上,我需要一个返回以下内容的查询:

lid | uhits |
1   | 1     |
2   | 2     |
3   | 1     |
Run Code Online (Sandbox Code Playgroud)

有谁知道怎么做到的?

Luc*_*ato 22

Select lid, count(distinct IP) as uhits
from hits
group by lid
Run Code Online (Sandbox Code Playgroud)


lc.*_*lc. 7

在你开始进入非常复杂的查询之前,SQL就是这样做的,所以它看起来就像一个自然的句子.首先,如果您可以准确描述查询的内容,那么您已经编写了一半SQL.

在这种情况下,您可以描述您的问题,如:

获取lid和独特的总数量IP从我的表中的每个lid.

唯一剩下的就是使用SQL关键字来翻译它.这里重要的是:

  • 得到 - >SELECT
  • - >COUNT
  • 独特 - >DISTINCT
  • aggregate..for each <field> - >SELECT <aggregate function>..GROUP BY <field>

所以,你上面的句子开始看起来像:

SELECT lid和骨料COUNTDISTINCT IP FROM我的表GROUP BY lid.

删除不必要的单词,并将其清理为使用SQL语法会留下最终查询:

SELECT hits.lid, COUNT(DISTINCT hits.IP) AS uhits
FROM hits
GROUP BY hits.lid
Run Code Online (Sandbox Code Playgroud)