Mysql 根据组的某些默认值选择
我有一个包含人名和各自国家代码的SQL表Mysql 根据组的某些默认值选择,mysql,sql,Mysql,Sql,我有一个包含人名和各自国家代码的SQL表 ---------------- name | code ---------------- saket | IN rohan | US samules | AR Geeth | CH Vikash | IN Rahul | IN Ganesh | US Zorro | US 我想要的是,我应该能够按国家分组code,让名字首先以sa开头,如果不是,那么就是Vi,即使不是最后
----------------
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%';
但在have子句中,它给了我符合上述条件的行。
我想如果条件失败,那么给我该组的最后一行,可能吗?。
如果可能的话,怎么做?可能效率不高,但尝试一下:
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`
您可以尝试此查询。它返回您需要的内容,但请注意-此查询有两个陷阱:
+---------+---------+
| name | country |
+---------+---------+
| Geeth | CH |
| saket | IN |
| samules | AR |
| Zorro | US |
+---------+---------+
如果手册上说这个值还没有确定,你为什么要建议这个功能呢?MySQL会在我做类似选择时返回第一个值。也许是运气。。。无论如何,如果这个选择需要一次,这会有所帮助。我相信,明确这是你自己的观察是公平的,因为这种行为没有被记录下来=它可能会在未来的版本中发生变化。是的,在这个原因中,我在帖子中注意到第2点的危险。
+---------+---------+
| name | country |
+---------+---------+
| Geeth | CH |
| saket | IN |
| samules | AR |
| Zorro | US |
+---------+---------+