MySQL有if

问题描述 投票:0回答:3

我遇到MySQL查询问题。如果标签是“5”,那么我只想要当天有超过10个的记录,而其他标签的任意行数。在查询中完成此操作的最佳方法是什么?

SELECT id,name,label,date
FROM items
GROUP BY DATE('date'), label
HAVING COUNT(id) > 10 IF label = 5
mysql sql having having-clause
3个回答
3
投票

我会在一个查询中执行此操作:

SELECT id, name, label, date
FROM items
WHERE date >= date(now()) and date < date(now()) + interval 1 day
GROUP BY label
HAVING (label <> 5) or (COUNT(id) > 10);

这似乎是最简单的方法。


2
投票
SELECT id,name,label,date
FROM items
WHERE label = 5 AND date = NOW()
GROUP BY  label
HAVING COUNT(id) > 10
UNION ALL
SELECT id,name,label,date
FROM items
WHERE  label != 5 AND date = NOW()
GROUP BY label
HAVING COUNT(id) > 0

这将返回不在GROUP BY中的列的不确定值。


1
投票

如果我正确理解您的问题,此查询将为您提供所需内容。

此查询仅在“日期”列的定义必须为日期类型时才起作用,否则除非您转换“日期”列,否则它将不起作用

SELECT label, COUNT(id) AS total
FROM items
WHERE label = 5 AND date = CURDATE()
GROUP BY label
HAVING COUNT(id) > 10

问题很混乱。根据你的评论试试这个

SELECTs.total, i.* FROM 
items AS i
LEFT JOIN (
    SELECT label, COUNT(id) AS total
    FROM items
    WHERE label = 5 AND date = CURDATE()
    GROUP BY label
    HAVING COUNT(id) > 10
) AS s ON s.label = i.label
WHERE date = CURDATE()
© www.soinside.com 2019 - 2024. All rights reserved.