mysql查询where IN语句

发布于 2024-09-16 07:11:58 字数 357 浏览 1 评论 0原文

我想要执行以下操作:

SELECT count(id) FROM table WHERE value BETWEEN 3 AND 40;

但它应该执行以下操作:

SELECT count(id) FROM table WHERE value IN(3, 4, 5, 6, 7, 8, 9, 10, 11, ..., 40);

它甚至应该打印出 3 到 40 之间的值的零计数(id),但不是 value = x。我想检查某个值是否在序列 (1, 2, 3, 4, ..., 50) 中。

有谁知道如何用mysql实现这一点?

谢谢。

I want to do the following:

SELECT count(id) FROM table WHERE value BETWEEN 3 AND 40;

But it should do the following:

SELECT count(id) FROM table WHERE value IN(3, 4, 5, 6, 7, 8, 9, 10, 11, ..., 40);

It should even print out zero count(id) for value between 3 and 40, but not value = x. I want to check if a value is in a sequence (1, 2, 3, 4, ..., 50).

Does anyone know how to achieve this with mysql?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

给我一枪 2024-09-23 07:11:58

MySQL 没有递归功能,因此您只能使用 NUMBERS 表技巧 -

  1. 创建一个仅保存递增数字的表 - 使用 auto_increment 很容易做到:

    如果存在`example`则删除表。`numbers`;
    创建表“示例”。“数字”(
      `id` int(10) 无符号 NOT NULL 自动增量,
       主键(`id`)
    ) 引擎=InnoDB 默认字符集=latin1;
    
  2. 使用以下方式填充表:

    插入数字
      (ID)
    价值观
      (无效的)
    

    ...您需要的任意数量的值。

  3. 这将返回您想要查看计数的值的列表:

    选择 n.id
      从数字 n
     3 和 (? - 1) 之间的 n.id 位于何处
        或 (? + 1) 和 40 之间的 n.id
    
  4. LEFT JOIN 到现有表中以便能够查看 COUNT 为零的位置:

     选择 x.id AS 值,
             COALESCE(COUNT(y.id), 0) AS cnt
        FROM (选择 n.id
                从数字 n
               3 和 (? - 1) 之间的 n.id 位于何处
                  或 (? + 1) 和 40) x 之间的 n.id
    LEFT JOIN YOUR_TABLE yt ON yt.value = x.id
     按 x.id 分组
    

MySQL doesn't have recursive functionality, so you're left with using the NUMBERS table trick -

  1. Create a table that only holds incrementing numbers - easy to do using an auto_increment:

    DROP TABLE IF EXISTS `example`.`numbers`;
    CREATE TABLE  `example`.`numbers` (
      `id` int(10) unsigned NOT NULL auto_increment,
       PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
  2. Populate the table using:

    INSERT INTO NUMBERS
      (id)
    VALUES
      (NULL)
    

    ...for as many values as you need.

  3. This will return a list of the values you want to see counts for:

    SELECT n.id
      FROM NUMBERS n
     WHERE n.id BETWEEN 3 AND (? - 1)
        OR n.id BETWEEN (? + 1) AND 40
    
  4. LEFT JOIN onto your existing table to be able to see where the COUNT is zero:

      SELECT x.id AS value,
             COALESCE(COUNT(y.id), 0) AS cnt
        FROM (SELECT n.id
                FROM NUMBERS n
               WHERE n.id BETWEEN 3 AND (? - 1)
                  OR n.id BETWEEN (? + 1) AND 40) x
    LEFT JOIN YOUR_TABLE yt ON yt.value = x.id
     GROUP BY x.id
    
-柠檬树下少年和吉他 2024-09-23 07:11:58

以下是您正在寻找的内容的猜测:

select c.Value,  count(t.Value) as Count
from (
    select 3 as Value
    union all select 4
    union all select 5 
    union all select 6 
    union all select 7 
    union all select 8 
    union all select 9 --add more as needed
) c
left outer join MyTable t on c.Value = t.Value
group by c.Value

Here is a guess at what you are looking for:

select c.Value,  count(t.Value) as Count
from (
    select 3 as Value
    union all select 4
    union all select 5 
    union all select 6 
    union all select 7 
    union all select 8 
    union all select 9 --add more as needed
) c
left outer join MyTable t on c.Value = t.Value
group by c.Value
何时共饮酒 2024-09-23 07:11:58

假设我理解你的问题:

SELECT count(id) FROM table WHERE value >= 3 AND value <= 40 AND value != 'x'

编辑:我想我知道你的意思

SELECT COALESCE(count(id),0)  FROM table WHERE value BETWEEN 3 AND 40;

Assuming I understood your question:

SELECT count(id) FROM table WHERE value >= 3 AND value <= 40 AND value != 'x'

Edit: I think I know what you mean

SELECT COALESCE(count(id),0)  FROM table WHERE value BETWEEN 3 AND 40;
眼眸印温柔 2024-09-23 07:11:58

我认为您正在寻找的是类似的东西:

SELECT value, count(id) FROM table
WHERE value BETWEEN 3 AND 40
GROUP BY value

但这不会为您提供任何不存在的值的 count(id) = 0 行。

I think what you're looking for is something like:

SELECT value, count(id) FROM table
WHERE value BETWEEN 3 AND 40
GROUP BY value

But that won't give you any count(id) = 0 rows for values that don't exist.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文