我有一个包含人名和国家代码的sql表。
----------------
name | code
----------------
saket | IN
rohan | US
samules | AR
Geeth | CH
Vikash | IN
Rahul | IN
Ganesh | US
Zorro | US
我想要的是,我应该能够按国家/地区code
分组,其名称首先是sa
,如果不是,那么Vi
即使不是SELECT * FROM MyTable GROUP BY code HAVING name like 'sa%' or name like 'vi%';
的最后一行基。
当我尝试这个时
{{1}}
但是它给了我一些符合上述条件的行。 我希望如果条件失败然后给我该组的最后一行,是否可能? 如果可能的话,怎么样?
答案 0 :(得分:0)
也许效率不高,但请尝试:
SELECT FIRST(`name`) AS `name`, `code` FROM (
SELECT `name`, `code` FROM `MyTable`
WHERE `name` LIKE 'sa%'
UNION ALL
SELECT `name`, `code` FROM `MyTable`
WHERE `name` LIKE 'vi%'
UNION ALL
SELECT LAST(`name`) AS `name`, `code` FROM `MyTable` GROUP BY `code`
HAVING `name` NOT LIKE 'sa%' AND `name` NOT LIKE `vi%'
) AS `a` GROUP BY `code`
答案 1 :(得分:0)
您可以尝试此查询。它返回你需要的东西,但要注意 - 这个查询有两个陷阱:
http://dev.mysql.com/doc/refman/5.7/en/group-by-extensions.html
select name, country
from
(
select *, if(name like 'sa%', 0, if(name like 'vi%', 2, 3) ) as name_order
from tmp_names
order by country, name_order, name desc
) as tmp_names
group by country
order by name;
返回
+---------+---------+
| name | country |
+---------+---------+
| Geeth | CH |
| saket | IN |
| samules | AR |
| Zorro | US |
+---------+---------+