-1

これは可能ですか?私は次の表を持っています

ID   CAR  MODEL  YEAR   FUELTYPE
1    Volvo S80   2007        GAS
2    Volvo S80D  2007        DIESEL
3    Volvo S80E  2009        LPN

私がやりたいのは、異なる FUELTYPE を年ごとに数えることです。出力は次のようになります。これが、使用したい Google Chart の形式です。

Year GAS DIESEL LPN
2007  1     1    0
2009  0     0    1

MySQLでどうすればいいですか?このようなことはできますか?

SELECT YEAR, COUNT(FUELTYPE) AS GAS, COUNT (FUELTYPE) AS DIESEL, COUNT (FUELTYPE) AS LPN
FROM  CARDATA
GROUP BY FUELTYPE
ORDER BY YEAR

各FUELTYPEで同じカウント値を取得するので、それが正しくないことはわかっています.mysqlから引き出して、phpを使用してソート/カウントする方が良いですか?

4

2 に答える 2

2

CASE式で集計関数を使用して、行データを列にピボットできます。

select year,
  sum(case when fueltype = 'gas' then 1 else 0 end) gas,
  sum(case when fueltype = 'diesel' then 1 else 0 end) diesel,
  sum(case when fueltype = 'lpn' then 1 else 0 end) lpn
from yt
group by year

SQL Fiddle with Demoを参照してください。

値の数が不明な場合はFuelType、準備済みステートメントを使用して動的 SQL を生成できます。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'sum(CASE WHEN fueltype = ''',
      fueltype,
      ''' THEN 1 else 0 END) AS `',
      fueltype, '`'
    )
  ) INTO @sql
FROM yt;

SET @sql 
  = CONCAT('SELECT year, ', @sql, ' 
            from yt
            group by year');

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

SQL Fiddle with Demoを参照してください。この両方の結果:

| YEAR | GAS | DIESEL | LPN |
-----------------------------
| 2007 |   1 |      1 |   0 |
| 2009 |   0 |      0 |   1 |
于 2013-04-08T13:13:19.850 に答える