【问题标题】:Need help in many to many query in Sql在 Sql 中的多对多查询中需要帮助
【发布时间】:2023-03-15 14:19:01
【问题描述】:

我有两个表 Coupon 和 Tags 他们有多对多的关系现在我想创建一些满足以下情况的 sql 视图

1- 需要用标签计算每个标签中有多少优惠券(完成)

2- 需要获取按热门标签排序的标签列表(热门标签是拥有最多优惠券的标签)

3- 需要统计过去 7 天内在每个标签上创建的所有优惠券

我为第一个条件编写的sql视图如下

SQLVIEW

Create VIEW [dbo].[TagsWithCount] AS

  SELECT Tag.Id as Id , Tag.Name as TagName ,Tag.description as Description,
   COUNT(*) AS CouponCount
   FROM Tags AS Tag
   inner JOIN couponsTotags c ON c.Tagid = Tag.id  
    GROUP BY Tag.Name , Tag.Id ,Tag.description
    GO

它给了我以下结果

我怎么能得到,其余的事情谁能帮助我,如果你需要任何其他细节告诉我

提前致谢

【问题讨论】:

  • ORDER BY CouponCount DESC for (2)
  • 第二个你可以按 CouponCount Desc 的视图排序,但第三个你的日期时间字段的格式是什么,它在 Coupon 的表格中吗?
  • @Smartboy 所有情况都应该放在一个查询中吗?
  • CreateDate 是标签表格式的字段:日期时间

标签: sql sql-server sql-server-2008 tsql sqlite


【解决方案1】:
    Create VIEW [dbo].[TagsWithCount] AS

    select * from  (SELECT Tag.Id as Id , Tag.Name as TagName ,Tag.description as Description,
       case when DATEDIFF(day, CreateDate, systemdate)<=7 then 'Its sevendays old'
else 'its more than 7 days old' end as SevendaysOldStatus,COUNT(*) AS CouponCount    
       FROM Tags AS Tag
       inner JOIN couponsTotags c ON c.Tagid = Tag.id  
        GROUP BY Tag.Name , Tag.Id ,Tag.description,CreateDate) temp
    order by CouponCount desc
        GO

验证系统日期未在任何编辑器中尝试过,但希望能满足您的要求

【讨论】:

  • 一切都很好,但我们应该使用ORDER BY CouponCount DESC 而不是ORDER BY CouponCount DESC @Ash 说,谢谢大家
  • 对不起@Rahul,它在SevendaysOld 中给出了错误的计数。我的意思是,如果一个标签有 3 张优惠券,它会显示 3 张 SevendaysOld 应该是一个显示天气的字段,这个标签是否存在 7 天,希望你明白我的意思
猜你喜欢
  • 2011-03-08
  • 2011-05-29
  • 2011-04-03
  • 2016-04-05
  • 1970-01-01
  • 2016-07-04
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多