mysql - 更改查询中单独列中的项目名称以使分组更容易

标签 mysql sql

我正在尝试计算某些卖家的完整库存。但是,我在根据两个单独的列将信息分组在一起时遇到问题。对于列出的每件商品,都有一个“卖家”列,还有一个“推断卖家”列,其中可以列出产品的原始公司(想想 Costco 的 Kirkland 产品是否在英国的 Tesco 市场销售)。我想为主要客户计算全部项目。

Sample Data:

ID    seller      item     inferred_seller
1     Store_A     Chips     Store_A
2     Store_B     Donuts    NULL
3     Store_C     Crackers  NULL
4     Store_D     Chicken   Store_B
5     Store_D     Soup      Store_C
6     Store_E     Apple     Store_C
7     Store_E     Plum      Store_B
8     Store_E     Bread     Store_A

我已经尝试过的是将卖家列表别名为 inferred_seller 的 Case When 场景,以便我可以将它们添加在一起。

SELECT CASE WHEN seller IN ('Store_A','Store_B','Store_C') THEN 
seller WHEN inferred_seller IN ('Store_A','Store_B','Store_C') THEN 
inferred_seller = seller END AS seller's, count(id)
FROM items
WHERE seller IN ('Store_A','Store_B','Store_C') OR 
inferred_seller IN ('Store_A','Store_B','Store_C')
GROUP BY 1

目前,这仅输出卖家列中的信息,而推断的部分则放入 NULL 或 0 分组中。我想要它显示的是商店 A 由卖家 + 推断卖家组成(如果已经不在卖家之下)。

理想情况下,结果将显示如下所示:

Sellers   count(id)
Store_A     2
Store_B     3
Store_C     3

感谢任何帮助,谢谢。

最佳答案

您可以使用 UNION 返回一个数据集,其中两个字段合并为一列:

SELECT
    Seller, 
    COUNT(id)
FROM (
    SELECT
        Id,
        Seller
    FROM items
    WHERE Seller IN ('Store_A','Store_B','Store_C')

    UNION ALL

    SELECT
        Id,
        Inferred_Seller
    FROM items
    WHERE Inferred_Seller IN ('Store_A','Store_B','Store_C')
    )    
GROUP BY Seller

关于mysql - 更改查询中单独列中的项目名称以使分组更容易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54563476/

相关文章:

java - 在java中用一个或多个词搜索整个数据库

sql - 从下表获取唯一集的最佳 SQL 查询

sql - 如何在主键上创建 SQL 约束以确保它只能被引用一次?

mysql infile 将字符串转换为时间格式

MYSQL:从查询更新值

php - 禁用 MySQL 旧密码有哪些风险?

php - 使用简单的 JOIN

mysql - Heroku 上的 Sails 应用程序未连接到 JawsDB

sql - 如何将一个表中的最新行连接到另一个表中?

mysql - 获取每小时累计金额