Sql 输出出现x次以上的记录

Sql 输出出现x次以上的记录,sql,Sql,我是SQL的初学者,我需要帮助来获得这种情况的解决方案 输出在一个月内买票参观公园超过4天的任何人的姓名。(此外,还包括当月的输出。) 我无法测试我的代码,但到目前为止我所做的是 SELECT name, month FROM Visitor NATURAL JOIN Ticket AS t JOIN (SELECT name, month FROM Visitor NATURAL JOIN Ticket GROUP BY month, year HAVING COUN

我是SQL的初学者,我需要帮助来获得这种情况的解决方案

输出在一个月内买票参观公园超过4天的任何人的姓名。(此外,还包括当月的输出。)

我无法测试我的代码,但到目前为止我所做的是

SELECT name, month
FROM Visitor NATURAL JOIN Ticket AS t
JOIN (SELECT name, month
    FROM Visitor NATURAL JOIN Ticket 
    GROUP BY month, year
    HAVING COUNT(1) > 4
) AS s
ON t.name = s.name AND t.month = s.month;
我不知道这是否正确。
请帮助。

您的查询在技术上可能是正确的。但子查询回答了您的问题:

SELECT s.name, t.month
FROM Visitor inner JOIN Ticket AS t
ON t.visitID= s.visitID
group by month, year
having count(day)>4
SELECT name, month
FROM Visitor NATURAL JOIN Ticket 
GROUP BY month, year
HAVING COUNT(1) > 4;
不过有两点。不要使用
自然连接
。根据表中列的名称,它可以做一些奇怪的事情。使用上的
或使用
显式命名列。而且,在一些数据库中,
month
year
可能是保留字。因此,它们是列的坏名称。您可以用双引号引用它们(在大多数数据库中)。因此:

SELECT "month", "year"
FROM Visitor INNER JOIN
     Ticket 
     using (VisitorId)
GROUP BY "month", "year"
HAVING COUNT(1) > 4;
查询可能需要计算不同的日期。在这种情况下,
having
子句应为:

HAVING count(distinct "day") > 4

我刚刚开始学习Mysql。我仍然在学习基本的语法和所有的东西,所以我真的帮不上忙。但是你不觉得你的问题有错吗。visitor表中的As Name属性不是唯一的(甚至不应该是唯一的)。所以基本上你找不到同一个人。你只是想找到一个月内去过公园4次的同名不同的人。

那么整个查询看起来如何?对不起,我是SQL新手,所以我仍然有点困惑。什么样的建议编辑会被橡皮图章盖住,这总是让我感到惊讶。有人无缘无故地降低了格式的标准性,降低了可读性,并获得了3-0的批准:|@再见。没有标准格式。我有自己的风格,对此我非常挑剔,我通常讨厌有人(像原来的改变者,而不是你)撤销格式。
HAVING count(distinct "day") > 4