gpt4 book ai didi

MYSQL 在同一个表上使用 Group By Clauses 进行子查询...

转载 作者:行者123 更新时间:2023-11-29 02:48:13 24 4
gpt4 key购买 nike

用 mysql 可能是另一个简单的左/右连接...但它有点复杂,到目前为止我看到的所有示例似乎都无法使用我现有的东西。如果这有点令人困惑,我深表歉意……我将尝试真正拼写出来。基本上,有三个 SELECT 查询从 SAME 表中选择数据。在名为“Order_Items”的表中只有四个字段与我交互,它是:

  • 'Item' - 项目名称,但是这可以是空白,当我需要获取时:
  • 'Essential_Type' - 备用项目名称
  • 'QTY' - 在特定订单中订购的商品的订购数量。现在,如果 Item 为空,我需要 COUNT(Essential_Type) 而不是 SUM(QTY) 因为 QTY这些行的值为 Null,但该行需要计为 1
  • 'Created' - 订单创建的日期时间

查询 #1:这让我知道了商品的名称以及已售出的数量

SELECT 
IF(Item='', Essential_Type, Item) AS Name,
IF(Item='', COUNT(Essential_Type), SUM(QTY)) AS Qty
FROM Order_Items
GROUP BY Item, Essential_Type
ORDER BY Qty

返回:

NAME          QTY
---------------------
8x10 2345
16x20 340

查询 #2:这让我知道了今年售出的每件商品的数量

SELECT 
IF(Item='', Essential_Type, Item) AS Name,
IF(Item='', COUNT(Essential_Type), SUM(QTY)) AS ThisYear
FROM Order_Items
WHERE year(Created)=2016
GROUP BY Item, Essential_Type

返回:

Name          ThisYear
-----------------------------
8x10 120
16x20 25

查询 #3:这让我得到了去年售出的每件商品的数量

SELECT 
IF(Item='', Essential_Type, Item) AS Name,
IF(Item='', COUNT(Essential_Type), SUM(QTY)) AS LastYear
FROM Order_Items
WHERE year(Created)=2015
GROUP BY Item, Essential_Type

返回:

Name          LastYear
-----------------------------
8x10 500
16x20 30


例如,如果 Order_Items 看起来像这样:

Item           Essential_Type           QTY       Created
---------------------------------------------------------------------
8x10 3 2016-09-01
8x10 1 2015-07-21
16x20 NULL 2015-08-12
16x20 NULL 2016-05-21

如何使用 JOIN 将这三个有点复杂的 SELECT 组合成一个 SELECT 语句?基本上最终结果将是(基于上面的示例表):

Name          QTY         ThisYear        LastYear
-----------------------------------------------------------
8x10 4 3 1
16x20 2 1 1

感谢阅读和任何可能的帮助!

最佳答案

我发现聚合的逻辑很尴尬(我怀疑使用 UNION ALL 查询会更简单)。但是,您可以使用条件聚合来扩展您的查询:

SELECT (CASE WHEN Item = '' THEN Essential_Type ELSE Item END) AS Name,
(CASE WHEN Item = '' THEN COUNT(Essential_Type) ELSE SUM(QTY) END) AS Qty,
(CASE WHEN Item = ''
THEN COUNT(CASE WHEN YEAR(Created) = 2015 THEN Essential_Type END)
ELSE SUM(CASE WHEN YEAR(Created) = 2015 THEN QTY END)
END) as yr2015,
(CASE WHEN Item = ''
THEN COUNT(CASE WHEN YEAR(Created) = 2016 THEN Essential_Type END)
ELSE SUM(CASE WHEN YEAR(Created) = 2016 THEN QTY END)
END) as yr2016
FROM Order_Items
GROUP BY Item, Essential_Type
ORDER BY Qty;

关于MYSQL 在同一个表上使用 Group By Clauses 进行子查询...,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com