我不确定我是否完全理解你的问题,所以我添加了一点 - 假设我有这个输入:
countryCode tag1 tag2 tag3 tag4 tag5 tag6 tag7 tag8
GB 2 4 5 8 9 1 1 0
FR 9 4 4 8 9 1 7 0
.
.
然后您希望输出为:
国家代码 number1 number2 number3
GB tag5 tag4 tag3
FR tag1, tag5 tag4 tag7
?
如果您期望上述结果,max 将无济于事,您的数据格式也无济于事。你可能会做类似下面的事情,这很糟糕......
select countryCode, tagName, value from
(select a.countryCode, 'tag1' tagName, a.tag1 value from countries a where a.countryCode = 'GB' UNION
select b.countryCode, 'tag2' tagName, b.tag2 value from countries b where b.countryCode = 'GB' UNION
select c.countryCode, 'tag3' tagName, c.tag3 value from countries c where c.countryCode = 'GB' UNION
select d.countryCode, 'tag4' tagName, d.tag4 value from countries d where d.countryCode = 'GB' UNION
select e.countryCode, 'tag5' tagName, e.tag5 value from countries e where e.countryCode = 'GB' UNION
select f.countryCode, 'tag6' tagName, f.tag6 value from countries f where f.countryCode = 'GB' UNION
select g.countryCode, 'tag7' tagName, g.tag7 value from countries g where g.countryCode = 'GB' UNION
select h.countryCode, 'tag8' tagName, h.tag8 value from countries h where h.countryCode = 'GB' UNION
select i.countryCode, 'tag9' tagName, i.tag9 value from countries i where i.countryCode = 'GB' UNION
select j.countryCode, 'tag10' tagName, j.tag10 value from countries j where j.countryCode = 'GB' )
as results
order by value desc
limit 3;
编辑:只是我所拥有的数据和表结构的一个示例。我在 MySQL 5.5.44-0ubuntu0.12.04.1 中运行它,以防万一这是版本差异。因此,如果您调整我上面的示例查询,那应该可以工作。
mysql> desc countries;
+-------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------+------+-----+---------+-------+
| countryCode | varchar(2) | YES | | NULL | |
| tag1 | int(11) | YES | | NULL | |
| tag2 | int(11) | YES | | NULL | |
| tag3 | int(11) | YES | | NULL | |
| tag4 | int(11) | YES | | NULL | |
| tag5 | int(11) | YES | | NULL | |
| tag6 | int(11) | YES | | NULL | |
| tag7 | int(11) | YES | | NULL | |
| tag8 | int(11) | YES | | NULL | |
| tag9 | int(11) | YES | | NULL | |
| tag10 | int(11) | YES | | NULL | |
+-------------+------------+------+-----+---------+-------+
11 rows in set (0.00 sec)
mysql> select * from countries;
+-------------+------+------+------+------+------+------+------+------+------+-------+
| countryCode | tag1 | tag2 | tag3 | tag4 | tag5 | tag6 | tag7 | tag8 | tag9 | tag10 |
+-------------+------+------+------+------+------+------+------+------+------+-------+
| GB | 5 | 1 | 2 | 5 | 7 | 8 | 9 | 3 | 15 | 22 |
| FR | 5 | 14 | 2 | 5 | 7 | 8 | 9 | 3 | 15 | 22 |
+-------------+------+------+------+------+------+------+------+------+------+-------+
2 rows in set (0.00 sec)
但理想情况下,如果您在其他地方获取此数据,则可能更容易且更推荐使用其他表,因为我发送给您的查询会很慢。
理想的情况是您有一个表 Country Code and Tag,您可以直接在其上使用聚合函数。