2013-06-13 3 views
0

У меня проблема с выбором данных сортировки. Это я объясняю свою проблему:сумма определенного количества от одной таблицы

стол студент:

id name degree 
1 Adam 11 
2 Adam 12 
3 Beny 11 
4 Beny 13 
5 Charly 12 
6 Adam 11 

я хочу получить результат, как этот:

name degree 11 degree 12 degree 13 
Adam 2   1   0 
Beny 1   0   1 
Charly 0   1   0 

я спутал способ получить это результат .. я попытался использовать присоединиться , союз и все еще не получили решение. Пожалуйста, дайте мне предложение решить его. Благодаря

ответ

6

, если вы знаете количество degree, это может быть сделано с помощью статического запроса,

SELECT Name, 
     SUM(CASE WHEN degree = 11 THEN 1 ELSE 0 END) `degree 11`, 
     SUM(CASE WHEN degree = 12 THEN 1 ELSE 0 END) `degree 12`, 
     SUM(CASE WHEN degree = 13 THEN 1 ELSE 0 END) `degree 13` 
FROM tableName 
GROUP BY Name 

ВЫВОД

╔════════╦═══════════╦═══════════╦═══════════╗ 
║ NAME ║ DEGREE 11 ║ DEGREE 12 ║ DEGREE 13 ║ 
╠════════╬═══════════╬═══════════╬═══════════╣ 
║ Adam ║   2 ║   1 ║   0 ║ 
║ Beny ║   1 ║   0 ║   1 ║ 
║ Charly ║   0 ║   1 ║   0 ║ 
╚════════╩═══════════╩═══════════╩═══════════╝ 

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

SELECT GROUP_CONCAT(DISTINCT 
     CONCAT('SUM(CASE WHEN degree = ', 
       degree, 
       ' THEN 1 ELSE 0 END) AS ', 
       CONCAT('`degree ', degree, '`') 
       )) INTO @sql 
FROM Tablename; 

SET @sql = CONCAT('SELECT Name, ', @sql, ' 
        FROM tableName 
        GROUP BY Name'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

Высокий. Это Работа .. спасибо JW. – indi60

+0

@ indi60, пожалуйста, отметьте это как ответ – vikas

0
select name, 
     sum(if(degree=11,1,0)) "degree 11", 
     sum(if(degree=12,1,0)) "degree 12", 
     sum(if(degree=13,1,0)) "degree 13" 
from student 
group by name; 
Смежные вопросы