在MySQL中计算频率

时间:2015-02-04 19:34:10

标签: mysql sql select inner-join frequency

我正在创建一个库数据库,并有四个表,如下所示;

我一直在研究如何计算MySQL中的频率,但经过长时间和误解之后,我决定尝试一个如何计算表格的例子,我会理解。以下是我目前使用的四个表格。

我希望锻炼已借出2次或以上的每本书的贷款频率。通过这样做,我可以看到在选择特定值而不是所有价值观。

从查看我的表格时,我必须从贷款表中选择“代码”,选择出现两次或更多次的所有值,然后确定事件发生的频率。

根据我的研究,我决定使用INNER JOIN来连接表,使用COUNT来计算值的数量,使用GROUP BY对值进行分组,然后使用HARTING,因为不能使用WHERE。我在编写查询时遇到问题并不断发现错误。任何人都可以使用上面的例子来解释他们如何计算每本借两次或更多书的频率?提前致谢

表1 - 书

isbn title author 111-2-33-444444-5 Pro JavaFX Dave Smith 222-3-44-555555-6 Oracle Systems Kate Roberts 333-4-55-666666-7 Expert jQuery Mike Smith

表2 - 复制

code isbn duration 1011 111-2-33-444444-5 21 1012 111-2-33-444444-5 14 1013 111-2-33-444444-5 7 2011 222-3-44-555555-6 21 3011 333-4-55-666666-7 7 3012 333-4-55-666666-7 14

表3 - 学生

no name school embargo 2001 Mike CMP No 2002 Andy CMP Yes 2003 Sarah ENG No 2004 Karen ENG Yes 2005 Lucy BUE No

表4 - 贷款

code no taken due return 1011 2002 2015.01.10 2015.01.31 2015.01.31 1011 2002 2015.02.05 2015.02.26 2015.02.23 1011 2003 2015.05.10 2015.05.31 1013 2003 2014.03.02 2014.03.16 2014.03.10 1013 2002 2014.08.02 2014.08.16 2014.08.16 2011 2004 2013.02.01 2013.02.22 2013.02.20 3011 2002 2015.07.03 2015.07.10 3011 2005 2014.10.10 2014.10.17 2014.10.20

1 个答案:

答案 0 :(得分:1)

您没有指定频率类型,但此查询计算2014年多次借出的每本图书的每周贷款数量:

select  b.isbn
,       b.title
,       count(*) / 52 -- loans/week
from    loan l
join    copy c
on      c.code = l.code
join    book b
on      b.isbn = c.isbn
where   '2014-01-01' <= taken and taken < '2015-01-01'
group by
        b.isbn
,       b.title
having  count(*) > 1 -- loaned more than once