作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
用 mysql 可能是另一个简单的左/右连接...但它有点复杂,到目前为止我看到的所有示例似乎都无法使用我现有的东西。如果这有点令人困惑,我深表歉意……我将尝试真正拼写出来。基本上,有三个 SELECT 查询从 SAME 表中选择数据。在名为“Order_Items”的表中只有四个字段与我交互,它是:
查询 #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/
我是一名优秀的程序员,十分优秀!