【问题标题】:Allow repeat record with IN clause允许带有 IN 子句的重复记录
【发布时间】:2016-10-21 20:31:12
【问题描述】:

这种看似简单的任务,但我想我不知道在互联网上找到合适的词。

我想要的只是这样:

SELECT SUM(price) FROM products WHERE id IN (5, 10, 10, 10, 13, 15, 18, 18);

这基本上会返回我的结果:

price_of_5 + price_of_10 + price_of_10 + price_of_10 + 
price_of_13 + price_of_15 + price_of_18 + price_of_18

也就是说,这个概念是SELECTIN 子句中指定的行数完全相同,即使一个值被指定了多次。

编辑

这是一个简单的测试环境(or a fiddle

1- 创建表

CREATE TABLE products (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,  
  `price` float NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2- 喂桌子

INSERT INTO products VALUES (1, 'Apple', 5), (2, 'Orange', 6), (3, 'Grape', 10), (4, 'Watermelon', 20), (5, 'Cashew', 7);

3- 我想要的示例:

SELECT SUM(price) FROM products WHERE id IN (1, 2, 2, 4);

结果:31 (5 + 6 + 20)

预期:37(5 + 6 + 6 + 20)

【问题讨论】:

  • 能否提供数据样本和预期结果集?
  • @Alex 我刚刚发布了一个小提琴

标签: mysql select in-clause


【解决方案1】:

这是我的方法:

SELECT SUM(p.price) 
FROM (
        SELECT 5 id
        UNION ALL 
        SELECT 10 
        UNION ALL
        SELECT 10 
        UNION ALL
        SELECT 10 
        UNION ALL
        SELECT 13 
        UNION ALL
        SELECT 15 
        UNION ALL
        SELECT 18 
        UNION ALL
        SELECT 18 
    ) as t

INNER JOIN products p
ON t.id = p.id;

更新根据提供的数据示例和小提琴,您可以为您的案例转换查询,例如:

http://sqlfiddle.com/#!9/189bc/4

SELECT SUM(p.price) 
FROM (
        SELECT 1 id
        UNION ALL 
        SELECT 2 
        UNION ALL
        SELECT 2 
        UNION ALL
        SELECT 4 
     ) as t
INNER JOIN products p
ON t.id = p.id;

【讨论】:

  • 我看到您拒绝了我的编辑,但由于双括号,查询出现了 Sintax 错误。我还想我可以删除你的 id 定义,因为我没有注意到那是一个别名。
猜你喜欢
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
相关资源
最近更新 更多