这个问题非常类似于:https://stackoverflow.com/posts/1503959/edit 但我想更进一步,为每个年龄创建新的列,并计算该年龄。
我有一张人的表:
name | age
--------
bill | 25
tom | 25
tom | 23
tom | 23
我想查询所有名称,以及计算年龄相同的名称的其他列:
name | 23 | 25
----------------
bill | 0 | 1
tom | 2 | 1
最有效的方法是什么? 我担心子查询会很慢,我想知道是否有更好的方法。有吗?
答案 0 :(得分:1)
如果您有许多年龄值,动态数据透视非常有用
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when age = ''',
age,
''' then 1 else 0 end) AS ','`',
age,'`'
) ORDER BY age
) INTO @sql
FROM
t;
SET @sql = CONCAT('SELECT name, ', @sql, '
FROM t
GROUP BY name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
答案 1 :(得分:0)
在SQL中如何执行此操作的最简单方法是使用GROUP BY
。
SELECT name, age, COUNT(*) AS occurence
FROM table
GROUP BY name, age
但是你得到的格式不同。你需要在PHP中重新格式化它们,因为SQL并不是你想要的工作方式。