mysql查询:SELECT DISTINCT column1,GROUP BY column2

Ada*_*Tal 19 mysql select group-by distinct

现在我有以下查询:

SELECT name, COUNT(name), time, price, ip, SUM(price) 
  FROM tablename 
 WHERE time >= $yesterday 
   AND time <$today GROUP BY name
Run Code Online (Sandbox Code Playgroud)

而我想要做的是通过列'ip'添加DISTINCT,即

SELECT DISTINCT ip FROM tablename 
Run Code Online (Sandbox Code Playgroud)

所以我的最终输出将是所有列,从今天时间的所有行,按名称分组(每个重复名称的名称计数),没有重复的IP地址.

我的查询应该是什么样的?(或者,如何使用php将丢失的过滤器添加到输出中)?

提前致谢.


[UPDATE]

为了最大限度地减少混淆,请考虑这个(简化的)db表:

|   name   |   ip   |
---------------------
|  mark    |  123   |
|  mark    |  123   |
|  mark    |  456   |
|  dave    |  789   |
|  dave    |  087   |
Run Code Online (Sandbox Code Playgroud)

我正在寻找的结果将是一个HTML表格,如下所示:

|  name    |  name count   |
----------------------------
|  mark    |      2        |
|  dave    |      2        |
Run Code Online (Sandbox Code Playgroud)

我目前得到的是:

|  name    |  name count   |
----------------------------
|  mark    |      3        |
|  dave    |      2        |
Run Code Online (Sandbox Code Playgroud)

(它标记3次,即使两次使用相同的ip).

kni*_*ttl 54

你可以使用COUNT(DISTINCT ip),这只会计算不同的值

  • 哦,等等,等等。试图重现查询以回答Marks问题的答案显示:这确实可行!!!!我不敢相信 我想我可能会哭。 (2认同)
  • 当您不提供整个SELECT语句时,我们如何理解您的意思? (2认同)

Mar*_*ers 13

替换FROM tablenameFROM (SELECT DISTINCT * FROM tablename)应该给你想要的结果(忽略重复的行),例如:

SELECT name, COUNT(*)
FROM (SELECT DISTINCT * FROM Table1) AS T1
GROUP BY name
Run Code Online (Sandbox Code Playgroud)

测试数据的结果:

dave 2
mark 2
Run Code Online (Sandbox Code Playgroud)