我有一个表应该是这样的:
CREATE TABLE orders
(
order_number int PRIMARY KEY,
client varchar(20),
revenue int,
fixed_transport_cost int,
income int,
order_date date
)
我期望的是这样的:
Select clients whose first order was placed in 2017 and calculate how much income was genereted in 2018 (total) per each of them.
我尝试过的是:
SELECT
clients, SUM(income)
FROM
orders
HAVING
YEAR(order_date) = '2018'
AND income = ANY (SELECT income FROM orders
WHERE YEAR(order_date) = '2017')
GROUP BY
income;
但看起来查询不正确。我的问题是如何检查是否有人在 2017 年订购过?
最佳答案
- 首先,HAVING 子句应放在 GROUP BY 子句之后。
- 其次,您应该检查 2017 年的第一笔订单,而不是 2017 年的任何订单。这就是您所要求的。事实上,HAVING 在这里不是必需的。
- 您需要按客户分组,因为您正在查找每个客户的收入总和(如果我理解得很好的话)。
您可以尝试以下查询:
SELECT
client, SUM(income)
FROM
orders
WHERE
YEAR(order_date) = '2018'
AND client IN (
SELECT client
FROM orders
GROUP BY client
HAVING MIN(YEAR(order_date)) = '2017')
GROUP BY
client;
或者
SELECT
o1.client, SUM(o1.income)
FROM
orders o1
WHERE
YEAR(o1.order_date) = '2018'
AND '2017' = (
SELECT MIN(YEAR(o2.order_date))
FROM orders o2
WHERE o2.client = o1.client)
GROUP BY
o1.client;
如果您希望我们尝试查询并为您提供演示,请提供数据示例。
关于mysql - 根据条件过滤sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58957774/