2

(NAME FRUIT TIME) というフィールドを持つテーブルがあります

|   NAME |  FRUIT |  TIME |
|--------|--------|-------|
|   AJAY |  MANGO | 10:10 |
| SACHIN |  APPLE | 12:00 |
|    RAJ |  MANGO | 10:00 |
|   AJAY |  MANGO | 12:00 |
|   AJAY |  MANGO | 11:00 |
|   AJAY |  APPLE | 12:00 |
|    RAJ | BANANA | 12:00 |
|   AJAY | BANANA | 12:00 |
| SACHIN | BANANA |  2:00 |
| SACHIN |  MANGO | 12:00 |
|    RAJ |  MANGO | 12:00 |
| SACHIN |  APPLE | 12:00 |
|   AJAY |  APPLE | 12:00 |
|   AJAY |  APPLE | 12:00 |

上記の表から次のような出力を取得したいと思います。

|   NAME | MANGOCOUNT | APPLECOUNT | BANANACOUNT |
|--------|------------|------------|-------------|
|   AJAY |          3 |          3 |           1 |
|    RAJ |          2 |          0 |           1 |
| SACHIN |          1 |          2 |           1 |

私はこのように試しUNIONました:

SELECT NAME, COUNT(*) AS MANGOCOUNT FROM FRUIT_EAT 
 WHERE FRUIT='MANGO'  GROUP BY NAME 
UNION ALL 
SELECT NAME, COUNT(*) AS APPLECOUNT FROM FRUIT_EAT 
 WHERE FRUIT='APPLE' GROUP BY NAME 
UNION ALL 
SELECT NAME, COUNT(*) AS BANANACOUNT FROM FRUIT_EAT 
 WHERE FRUIT='BANANA' GROUP BY NAME;

私は結果を得ています

NAME        MANGOCOUNT
AJAY           3
RAJ            2
SACHIN         1
AJAY           3
RAJ            0
SACHIN         2
AJAY           1
RAJ            1
SACHIN         1

私は自分の間違いを理解していません。私を助けてください。

4

1 に答える 1

0

そのために使用する必要はありませんUNIONSUM()次のような関数とCASEステートメントを使用してこれを行うことができます。

SELECT Name
      ,SUM(CASE WHEN Fruit = 'Mango' THEN 1 ELSE 0 END) AS MangoCount
      ,SUM(CASE WHEN Fruit = 'Apple' THEN 1 ELSE 0 END) AS AppleCount
      ,SUM(CASE WHEN Fruit = 'Banana' THEN 1 ELSE 0 END) AS BananaCount
  FROM MyTable
 GROUP BY Name;

次の動的クエリも使用できます。

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

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

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

出力:

|   NAME | MANGOCOUNT | APPLECOUNT | BANANACOUNT |
|--------|------------|------------|-------------|
|   AJAY |          3 |          3 |           1 |
|    RAJ |          2 |          0 |           1 |
| SACHIN |          1 |          2 |           1 |

このSQLFiddleを参照してください

于 2013-09-14T04:25:12.927 に答える