我正在为我的知识水平开发一个相当棘手的SQL。我搜索并搜索了一个答案,但没有发现任何问题。希望有人可以对此有所了解。
如果未达到限制集,如何阻止SQL输出行组?
例如 -
数据
Fruits Ordered Date
Orange 4 2015-05-01
Orange 2 2015-05-01
Orange 20 2015-05-01
Apple 30 2015-05-02
Apple 40 2015-05-02
Apple 24 2015-05-02
Apple 19 2015-05-02
Apple 22 2015-05-02
从我想要选择的数据和按日期分组,但只有LIMIT为5。
如果该组中没有五行,我希望SQL忽略该组。
因此,如果我为每个日期组执行了所有有序值的SUM,并且SQL忽略了不包含5个值的组,则所需的结果将如下所示
期望的结果
Fruits SUM(Ordered) Date
Apple 117 2015-05-02
希望这是有道理的,如果需要,请提出任何问题!
答案 0 :(得分:2)
您可以使用having子句过滤掉您不需要的群组,只保留有超过4个日期的群组:
SELECT Fruits, SUM(Ordered), Date
FROM table
GROUP BY Date
HAVING COUNT(Date) > 4
答案 1 :(得分:1)
select Fruits,sum(Ordered),Date from Table
group by Fruits, Date
where Fruits in (select Fruits from Table
group by Fruits having count(*) >= 5)
答案 2 :(得分:0)
我想你想要这样的东西:
SELECT
Fruits, SUM(Ordered), Date
FROM (
SELECT
*,
CASE WHEN (SELECT COUNT(*) FROM t ti WHERE ti.Fruits = t.Fruits) < 5 THEN Ordered END As gID
FROM t) dt
GROUP BY
Fruits, gID
实际上您需要在PK
中使用Ordered
列代替CASE
,如下所示:
CASE WHEN (SELECT COUNT(*) FROM t ti WHERE ti.Fruits = t.Fruits) < 5 THEN `PK` END As gID