【发布时间】:2020-08-10 15:07:26
【问题描述】:
问题
Web_events表包含id,...,channel,account_idaccounts表包含id, ...,sales_rep_idsales_reps表包含id、name
给定上述表,编写一个 SQL 查询来确定特定 channel 在 web_events 表中用于 sales_reps 中每个名称的次数。您的最终表格应该包含三列 - sales_reps、channel 的名称和出现次数。首先对出现次数最多的表格进行排序。
回答
SELECT s.name, w.channel, COUNT(*) num_events
FROM accounts a
JOIN web_events w
ON a.id = w.account_id
JOIN sales_reps s
ON s.id = a.sales_rep_id
GROUP BY s.name, w.channel
ORDER BY num_events DESC;
COUNT(*) 让我很困惑。我不明白 SQL 是如何计算出COUNT(*) 是COUNT(w.channel)。谁能澄清一下?
【问题讨论】:
-
像
count()这样的聚合门函数会为您定义的每个组返回结果。 -
COUNT(*)表示“计数行”,即组合在一起的行数。与COUNT(w.channel)相同,但前提是w.channel不能为NULL。 -
基于
Group By子句。只是为了补充一点,在您的情况下,count(*)可能与count(w.channel)不同。您在组中也有s.name,这意味着count(*)将根据s.name和w.channel的组合给出计数
标签: sql join aggregate-functions