1

我正在阅读一本 SQL 教科书。另外,我有一个 CMS 驱动的 PHP/SQL 网站。我已经下载了我的数据库的副本,因为我了解“探索”时正确的查询结果应该是什么。

我的网站有一个“警报”功能,人们可以在其中注册警报,然后每次添加新内容时他们都会收到电子邮件通知。

特别是有两个表:alert和 *alert_sent*。警报包含个人的电子邮件地址,*alert_sent* 包含发送给个人的每封电子邮件的详细信息。因此,如果我说有 100 人在我的警报表中注册,则该表有 100 条记录。为简单起见,如果有 10 篇新文章,则总共发送了 1,000 封警报电子邮件 - 每个收件人 10 封。

当我登录到我的 CMS 网站的后端时,我可以看到一个人收到的警报电子邮件的数量。我想尝试重新创建这个,我想,我快到了。

为了获取所有相关记录,我运行了这个查询:

SELECT alert.alert_recipient,alert_sent.id
FROM alert
INNER JOIN alert_sent
ON alert_sent.alert_id=alert.id;

现在我有了,我想查询这个查询以显示那些收到最多电子邮件警报的人。像这样的东西:

SELECT COUNT(DISTINCT, alert_recipient, ID) FROM myqueryabove
GROUP BY alert_recipient
ORDER id DESC
LIMIT 10;

我有一些使用 MS Access 的经验,我只需给它一个名称,然后对它运行一个查询来保存查询。

我在这里试过:

SELECT alert.alert_recipient,alert_sent.id
    -> FROM alert
    -> INNER JOIN alert_sent
    -> ON alert_sent.alert_id=alert.id
    -> AS query_001;

但这又回来了

ERROR 1064 (42000):您的 SQL 语法有错误

如何查询我的查询以返回收到最多电子邮件警报的十个电子邮件地址 (alert_recipient) 的列表?

__更新一些答案_ _ 除了产生上一句中指定的所需结果之外,我的目标是了解如何查询现有查询。我喜欢一口大小的代码片段的想法,以后可以像查询表格一样查询它们,而不是试图将它们全部放在同一个查询中。这是我在 Access 中学习的产物。可能是我错误地接近 SQL?在这种情况下这种方法可行吗?

4

2 回答 2

1

尝试这样的事情(不要忘记投票;))

    选择 a.alert_recipient
    来自警报
    加入
    (
        选择前 10 名
        alert_id,
        计数(不同的 alert_id)
        来自 alert_sent
        按 alert_id 分组
        按计数排序(不同的 alert_id)
    )t
    在 a.id = t.alert_id
于 2013-07-04T16:15:24.170 回答
1

也许您可以尝试以下方法(它适用于 SQL SERVER 2008):

select top 10 alert.alert_recipient, count(alert.alert_recipient) as alert_sent_count 
from alert,  alert_sent
where alert.id = alert_sent.alert_id
group by alert.alert_recipient
order by alert_sent_count desc

但对于 MySql,我不知道,但猜测如下:

select alert.alert_recipient, count(alert.alert_recipient) as alert_sent_count 
from alert,  alert_sent
where alert.id = alert_sent.alert_id
group by alert.alert_recipient
order by alert_sent_count desc
limit 10
于 2013-07-04T16:24:08.810 回答