-1

这是我的表结构-

TABLE : T_LOG

---------------------------------------------------
 |    ID    |   AREA     |  USER_ID |   DATE
---------------------------------------------------
 |     1    |   AREA1    |     5    |  2000-05-17
---------------------------------------------------
 |     2    |   AREA1    |     5    |  2002-12-12
---------------------------------------------------
 |     3    |   AREA2    |     5    |  2003-02-19
---------------------------------------------------
 |     4    |   AREA1    |     5    |  2006-05-22
---------------------------------------------------
 |     5    |   AREA2    |     5    |  2006-07-29
---------------------------------------------------
 |     6    |   AREA3    |     5    |  2009-05-07
---------------------------------------------------

在这个表USER_ID 5中已经到了AREA几个DATEs。我想选择到目前为止具体有多少(唯一)AREAs 。USER_ID

以下查询

SELECT COUNT(*) FROM T_LOG WHERE USER_ID = 5 GROUP BY 'AREA'

在 6 个条目中返回 6。但我希望它在 3 个区域中唯一地返回 3 ( AREA1, AREA2, AREA3)

如何更正此查询?

4

3 回答 3

2

您可以使用计数(不同):

SELECT COUNT(DISTINCT AREA) FROM T_LOG WHERE USER_ID = 5
于 2013-06-03T07:50:24.143 回答
1

您的实际问题是您已将Area列指定为GROUP BY子句中的值(即GROUP BY 'Area')。应该没有单引号。(即GROUP BY Area

所以试试这个查询:

SELECT COUNT(*) FROM T_LOG WHERE USER_ID = 5 GROUP BY AREA

看到这个 SQLFiddle

或者,您可以直接使用COUNT(DISTINCT Area)其他答案中已经提到的(哪个更可取)。

于 2013-06-03T07:53:06.290 回答
0
SELECT COUNT(DISTINCT AREA), USER_ID FROM T_LOG WHERE USER_ID = 5
于 2013-06-03T07:50:03.340 回答