【问题标题】:Select field where a column has more than n elements SQL选择列具有多于 n 个元素的字段 SQL
【发布时间】:2021-03-30 00:04:24
【问题描述】:

看这个:

鉴于具有以下列的“客户”表:

• Name1  First name of the customer.
• Name2  Second Name of the customer.
• Surname1  Customer's First Surname.
• Surname2  Second Surname of the client.
• T_Documento  Type of customer document
• N_Document  Customer document number
• Country_Residence  Country where the Client Resides

有待解决:写一张支票,列出少于 10 个客户的居住国家/地区。

我一直在寻找正确的代码,但我仍然没有找到任何解决方案

SELECT * (
SELECT pais_residencia, COUNT(*) AS ClientesTotales
FROM Clientes
GROUP BY pais_residencia
) FROM Clientes
WHERE ClientesTotales > 10

这是错误的顺便说一句...

任何想法

【问题讨论】:

标签: mysql sql count subquery having-clause


【解决方案1】:

如果您需要显示表格中的所有数据, 您可以使用此代码

select
     name1,
     name2,
     surname1,
     surname2,
     t_documento,
     N_Document,
     country_residence
 FROM
     (
         SELECT
             name1,
             name2,
             surname1,
             surname2,
             t_documento,
             n_document,
             country_residence,
             COUNT(country_residence) OVER(
                 PARTITION BY country_residence
             ) clientestotales
         FROM
             clientes
     )
 WHERE
     clientestotales < 10;

【讨论】:

    【解决方案2】:

    如果您希望客户少于 10 个,那么您希望:

    SELECT * 
    FROM (SELECT pais_residencia, COUNT(*) AS ClientesTotales
          FROM Clientes
          GROUP BY pais_residencia
         ) r
    WHERE ClientesTotales < 10;
    

    根据问题,您的比较方向是错误的。

    此外,您的查询还有一些其他语法问题——例如,子查询应该是FROM 子句的一部分。

    您不需要为此设置子查询。你可以用HAVING:

    如果您想要少于 10 个客户,那么您想要:

    SELECT pais_residencia, COUNT(*) AS ClientesTotales
    FROM Clientes
    GROUP BY pais_residencia
    HAVING ClientesTotales < 10;
    

    【讨论】:

      【解决方案3】:

      如果您在外部查询中将&gt; 更改为&lt;(并在外部查询中添加FROM 以引入子查询),您的代码应该可以工作。

      但可以简化。您不需要子查询来过滤计数,您可以使用 having 子句代替:

      SELECT pais_residencia, COUNT(*) AS ClientesTotales
      FROM Clientes
      GROUP BY pais_residencia 
      HAVING COUNT(*) < 10
      

      MySQL 甚至支持在HAVING 子句中重用别名,可以这样表述:

      HAVING ClientesTotales < 10
      

      【讨论】:

        猜你喜欢
        • 2012-07-26
        • 1970-01-01
        • 2011-11-30
        • 2017-12-24
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多