2016-07-21 5 views
0

У меня есть таблица точно как этотMySQL выбрать и сосчитать в той же таблице

|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 два раза, когда общее количество должно составлять 3 для 6-го месяца и 2 для 7-го месяца.

Любая помощь appriciated

+0

выберите месяц, год, кол (1), как TOTAL_COUNT от где EmpID = 5 таблицы группы по месяцам, год ; – JYoThI

ответ

4

Используйте этот

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

Не используйте какой-либо сложной или суб запроса, это может достигается с помощью одного запроса

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

Вы можете попробовать использовать ниже запроса , вы получите желаемый результат.

SELECT 
month, 
year, 
count(*) as total 
FROM table_name 
where emp_id='5' 
group by month,year 
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 сек)

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 
Смежные вопросы