Mysql 行数与并集

Mysql 行数与并集,mysql,Mysql,我正在为hackerrank挑战编写一个查询,现在我的查询如下所示: (SELECT q1.city,q1.charsize ( SELECT city , MIN(LENGTH(city)) as charsize , ROW_NUMBER() OVER (PARTITION BY charsize,city order by city) as rowno from station ) q1 WHERE q1.rowno

我正在为hackerrank挑战编写一个查询,现在我的查询如下所示:

(SELECT q1.city,q1.charsize (
    SELECT 
        city
        , MIN(LENGTH(city)) as charsize
        , ROW_NUMBER() OVER (PARTITION BY charsize,city order by city) as rowno
    from station
   ) q1 
WHERE q1.rowno = 1)
UNION
(SELECT q2.city,q2.charsize (
    SELECT 
        city
        , MAX(LENGTH(city)) as charsize
        , ROW_NUMBER() OVER (PARTITION BY charsize,city order by city) as rowno
    from station
   ) q2 
WHERE q2.rowno = 1);
但当我执行它时,我得到以下信息:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT 
        city
        , MIN(LENGTH(city)) as charsize
        , ROW_NUMBE' at line 2
这意味着我正在做一些语法错误的事情,我对sql基本上没有什么经验,我已经看过文档了,但我很难理解为什么

如果有任何用途,这是表结构:


您似乎忘记了关键字中的一些

我认为你应该使用
UNION ALL
而不是
UNION

(SELECT q1.city,q1.charsize FROM (
    SELECT 
        city
        , MIN(LENGTH(city)) as charsize
        , ROW_NUMBER() OVER (PARTITION BY charsize,city order by city) as rowno
    from station
   ) q1 
WHERE q1.rowno = 1)
UNION ALL
(SELECT q2.city,q2.charsize FROM (
    SELECT 
        city
        , MAX(LENGTH(city)) as charsize
        , ROW_NUMBER() OVER (PARTITION BY charsize,city order by city) as rowno
    from station
   ) q2 
WHERE q2.rowno = 1);

假设您使用MySQL 8.0+

谢谢您的帮助,这个查询应该可以工作,但它仍然会给我其他语法错误:
第1行的错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用near(按字符大小分区,按城市顺序)作为rowno(从站点)q1 WH(第5行)的正确语法。此查询适用于MySQL 8.0!您是否在MySQL 8.0上查找您不知道的语法错误!使用
选择版本()是!这是正确的,我正在查看8.0文档,因此查询结果是这样的。通过选择版本,我得到了
5.7.25-0ubuntu0.18.04.2
。谢谢你的帮助!我将在5.7中对此进行转换。我的坏,下次我会检查我在哪个环境