我想从中得到
+-----------+--------+---------+
| name | color | species |
+-----------+--------+---------+
| Tom | grey | cat |
| Jerry | brown | mouse |
| Sylvester | black | cat |
| Tweety | yellow | bird |
| Garfield | orange | cat |
| Odie | yellow | dog |
| Bugs | grey | rabbit |
| Daffy | black | duck |
+-----------+--------+---------+
对此
+---------+------+-------+-------+--------+--------+
| species | grey | brown | black | yellow | orange |
+---------+------+-------+-------+--------+--------+
| cat | 1 | 0 | 1 | 0 | 1 |
| mouse | 0 | 1 | 0 | 0 | 0 |
| bird | 0 | 0 | 0 | 1 | 0 |
| dog | 0 | 0 | 0 | 1 | 0 |
| rabbit | 1 | 0 | 0 | 0 | 0 |
| duck | 0 | 0 | 1 | 0 | 0 |
+---------+------+-------+-------+--------+--------+
在 MySQL 中。
如果我事先知道颜色,我知道该怎么做。
SELECT
species,
COUNT(DISTINCT if (color='grey', name, null)) AS 'grey',
COUNT(DISTINCT if (color='brown', name, null)) AS 'brown',
COUNT(DISTINCT if (color='black', name, null)) AS 'black',
[...]
FROM animals
GROUP BY species
有没有办法在不为可能出现的每种颜色添加新的 COUNT 块的情况下实现这一点?如果颜色的名称不能用作列名,就会出现问题。
SQL中最简单的方法是
SELECT
species, color, COUNT(name)
FROM animals
GROUP BY species, color
但这需要更多代码来转换客户端的数据。