Please help me sort out the request: Develop a query to calculate the number of news, written by each author and the most popular tag, referred to author news. All these information must be output in one single result set.
I wrote the first part of the request, it displays the amount of news for each author:
x
SELECT news_author.author_id AS "Author ID", COUNT(*) AS "Amount of news"
FROM news
JOIN news_author ON id = news_author.news_id
JOIN news_tag ON id = news_tag.news_id
GROUP BY news_author.author_id
ORDER BY news_author.author_id;
Please tell me how to make a request for the most popular tag, referred to author news and combine these two samples into one result set.
You can use standard ANSI SQL features or Oracle SQL bonuses.
The table scheme is attached.
Advertisement
Answer
The most popular tag has a name in statistics, called the mode. And, Oracle has an aggregation function stats_mode()
to calculate it. So, you can use:
SELECT na.author_id AS "Author ID",
COUNT(DISTINCT n.id) AS num_news,
STATS_MODE(nt.tag_id)
FROM news n JOIN
news_author na
ON n.id = na.news_id JOIN
news_tag nt
ON n.id = nt.news_id
GROUP BY na.author_id
ORDER BY na.author_id;