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

結果を得る方法を混乱させました..結合、結合を使用してみましたが、まだ解決策が得られませんでした。それを解決するための提案をお願いします。ありがとう

4

2 に答える 2

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;
于 2013-06-13T03:52:10.607 に答える
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;
于 2013-06-13T03:54:41.880 に答える