如果在MySQL中未达到LIMIT,则忽略组

时间:2015-06-22 10:28:31

标签: mysql

我正在为我的知识水平开发一个相当棘手的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

希望这是有道理的,如果需要,请提出任何问题!

3 个答案:

答案 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