Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据组的某些默认值选择_Mysql_Sql - Fatal编程技术网

Mysql 根据组的某些默认值选择

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,即使不是最后

我有一个包含人名和各自国家代码的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%';
但在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`

您可以尝试此查询。它返回您需要的内容,但请注意-此查询有两个陷阱:

  • 子查询在10^6行上是一个难题
  • 外部查询中的字段名未聚合。MySQL文档说,不可能确定为非聚集的对象选择什么值
  • 它回来了

    +---------+---------+
    |  name   | country |
    +---------+---------+
    | Geeth   | CH      |
    | saket   | IN      |
    | samules | AR      |
    | Zorro   | US      |
    +---------+---------+
    

    如果手册上说这个值还没有确定,你为什么要建议这个功能呢?MySQL会在我做类似选择时返回第一个值。也许是运气。。。无论如何,如果这个选择需要一次,这会有所帮助。我相信,明确这是你自己的观察是公平的,因为这种行为没有被记录下来=它可能会在未来的版本中发生变化。是的,在这个原因中,我在帖子中注意到第2点的危险。
    +---------+---------+
    |  name   | country |
    +---------+---------+
    | Geeth   | CH      |
    | saket   | IN      |
    | samules | AR      |
    | Zorro   | US      |
    +---------+---------+