查询 SELECT DISTINCT count()

问题描述 投票:0回答:3

您好,我有以下疑问我想统计一个月内输入数据的次数。 我的数据库是:

  • 日期:
  • 10/2010
  • 10/2010
  • 09/2010
  • 08/2010

我有以下疑问。

SELECT DISTINCT (date)
    FROM employee 
    WHERE date 
    IN (SELECT date 
    FROM employee 
GROUP BY date 
HAVING count( date ) >0) 
ORDER BY date DESC;

这个查询给了我: 日期: 10/2017 8/2017 9/2017

但我希望你给我类似的东西。

  • 数 |日期
  • 2 | 10/2017
  • 1 | 9/2017
  • 1 | 10/2017

我希望我已经表达了我的问候。

mysql sql
3个回答
3
投票

你把事情搞得太复杂了;不需要子查询或 DISTINCT。

SELECT `date`, count(*) 
FROM `employee`
GROUP BY `date`
HAVING count(*) > 0
ORDER BY `date` DESC;

我有点困惑你会有什么理由

HAVING count() > 0
;某些东西计数为零的唯一方法意味着它不在表中(因此无论如何也不会显示)。

其他观察结果:

  • DISTINCT 不是一个函数;在 SELECT 子句中将
    date
    括在括号中绝对没有效果。 (此外,DISTINCT 几乎永远不适合 GROUPing 查询。)
  • COUNT(somefield)
    COUNT(1)
    COUNT(*)
    相同。如果您想要计算 unique 值,您可以执行
    COUNT(DISTINCT somefield)
    ;但
    COUNT(DISTINCT groupingfield)
    没有意义,因为这总是会导致 1。

1
投票

您编写的查询有点复杂。 Distinct 和 group by 在这里为您做同样的事情。当您按计数进行分组时,将自动为您提供分组行数。此外,您还将拥有独特的日期。试试这个。

SELECT count(date), date
    FROM employee
GROUP BY date 
HAVING count( date ) >0
ORDER BY date DESC;

0
投票

不需要使用“HAVING”,只需像下面这样使用:

SELECT `date`, count(*) 
FROM `employee`
GROUP BY `date`
ORDER BY `date` DESC;
© www.soinside.com 2019 - 2024. All rights reserved.