如何从以下模式中提取 SQL 计数?
Posted
技术标签:
【中文标题】如何从以下模式中提取 SQL 计数?【英文标题】:How would I extract a SQL count from the following schema? 【发布时间】:2012-03-24 07:21:30 【问题描述】:假设我有一个表 MEETING 如下
M_DATE
M_RACE_NO
M_VENUE
M_ATHLETE
主键是日期、比赛编号、场地、运动员。每个日期/比赛编号/场地可以包含许多可能的运动员。假设对于特定的运动员,我希望提取日期、比赛编号、场地以及在该特定日期/比赛编号/场地参加比赛的运动员总数
例如假设运动员 Bolt 参加了两项比赛,总场数为 7 和 9,我想要类似以下的内容
2011-10-03, 4, NY, 7
2010-24-02, 5, SY, 9
我知道它看起来像
SELECT M_DATE, M_RACE_NO, M_VENUE, SUM(...) FROM MEETING WHERE M_ATHLETE='Bolt'
我不确定 SUM 之后会发生什么
【问题讨论】:
什么 RDBMS (Oracle / mysql / ...)?它是否支持窗口函数 - 即count(...) over (...)
?
【参考方案1】:
如果您的 RDBMS 支持:
SELECT M_DATE, M_RACE_NO, M_VENUE,
COUNT(*) OVER (PARTITION BY M_DATE, M_RACE_NO, M_VENUE)
FROM MEETING
WHERE M_ATHLETE='Bolt'
如果没有:
select m1.m_date, m1.m_race_no, m1.m_venue, m2.count_races
from meeting m1
join (select m_date, m_race_no, m_venue, count(*) count_races
from meeting group by m_date, m_race_no, m_venue) m2
on m1.m_date = m2.m_date
and m1.m_race_no = m2.m_race_no
and m1.m_venue = m2.m_venue
where m1.m_athlete = 'Bolt'
【讨论】:
group by 和 join 应该是:GROUP BY m_date, m_race_no, m_venue
@ypercube 我错过了所有列的主键,我会更新我的答案:)【参考方案2】:
SELECT
m.m_date
, m.m_race_no
, m.m_venue
, COUNT(*) AS cnt
FROM
meeting AS m
JOIN
meeting AS m2
ON m2.m_date = m.m_date
AND m2.m_race_no = m.m_race_no
AND m2.m_venue = m.m_venue
WHERE
m.m_athlete = 'Bolt'
GROUP BY
m.m_date
, m.m_race_no
, m.m_venue
【讨论】:
以上是关于如何从以下模式中提取 SQL 计数?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SQL 查询中的 CREATE/UPDATE/INSERT 语句中提取表名?
如何从以 BLOB 类型存储在列中的 XML 中提取数据(通过 SQL 查询)
如何从数组列表中提取项目并对其进行计数,以便从元素及其总计数(正确)在 Java 中创建映射?