MySQL在同一个表中选择和计数

时间:2016-07-21 10:00:06

标签: mysql sql

我有一张完全像这样的表

|month|year|candidate_id|emp_id
|    6|2016|10          |5
|    6|2016|11          |5
|    6|2016|12          |5
|    7|2016|13          |5
|    7|2016|14          |5

所以我想计算每个月添加多少候选人并显示月份,年份和总候选人,如下所示

|Month|Year|Total
|    6|2016|3
|    7|2016|2

我尝试使用这个sql脚本

SELECT
    c.MONTH,
    c.YEAR,
    a.total
FROM
    wp_tsf_reports c,
    (
        SELECT
            COUNT(*) total
        FROM wp_tsf_reports b
        WHERE b.emp_id = '5'
        GROUP BY b.MONTH, b.YEAR DESC
    ) a
WHERE
    c.emp_id = '5'
GROUP BY c.MONTH, c.YEAR DESC

这是

的输出
|Month|Year|Total
|    6|2016|3
|    7|2016|3

你可以看到它显示3次,其中第6个月的总数应为3,第7个月则为2。

任何帮助都是适当的

5 个答案:

答案 0 :(得分:4)

使用此

select month, year, count(*) as total from table
where empid=5
group by month,year

答案 1 :(得分:1)

不要使用任何复杂或子查询,这可以使用单个查询

来实现
select month, year, count(1) total from wp_tsf_reports
where empid = 5
group by month,year

答案 2 :(得分:0)

您可以尝试使用以下查询,您将获得所需的输出。

SELECT 
month,
year,
count(*) as total 
FROM table_name 
where emp_id='5' 
group by month,year

答案 3 :(得分:0)

像这样的简单查询

select count(*),month,year  from report group by month having count(*) > 1;

结果

+----------+-------+------+
| count(*) | month | year |
+----------+-------+------+
|        3 |     6 | 2016 |
|        2 |     7 | 2016 |
+----------+-------+------+

2行(0.00秒)

答案 4 :(得分:0)

只是解释原始查询的注释(接受的解决方案非常适合解决问题)。

|本月|今年|共 | 6 | 2016 | 3 | 7 | 2016 | 2 我尝试使用这个sql脚本

您的子查询是

SELECT COUNT(*) total
FROM wp_tsf_reports b
WHERE b.emp_id = '5'
GROUP BY b.MONTH, b.YEAR DESC

这将返回2行: -

Total
3
2

然后将其与wp_tsf_reports表交叉连接,给予(暂时): -

|month|year|candidate_id|emp_id|total
|    6|2016|10          |5     |3
|    6|2016|10          |5     |2
|    6|2016|11          |5     |3
|    6|2016|11          |5     |2
|    6|2016|12          |5     |3
|    6|2016|12          |5     |2
|    7|2016|13          |5     |3
|    7|2016|13          |5     |2
|    7|2016|14          |5     |3
|    7|2016|14          |5     |2

您还没有从子查询返回月份和年份,也没有根据月份/年份指定加入,因此交叉连接为您提供表格和子查询中的每个行组合。

然后,GROUP BY将从每个月/每年的1行中选择值(即总列的值)。 MySQL选择使用哪些行值是未指定的。它可能是3或2,甚至可能会有所不同。

因此你得到: -

|Month|Year|Total
|    6|2016|3
|    7|2016|3

但同样可以得到

|Month|Year|Total
|    6|2016|2
|    7|2016|2
相关问题