Advertisement
kshah29

Student who got MAX marks in subject -dba.se

Sep 30th, 2015
360
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.82 KB | None | 0 0
  1. -- http://dba.stackexchange.com/a/116637/8783
  2. -- Author : KIN Shah
  3. -- http://dba.stackexchange.com/users/8783/kin
  4.  
  5. USE [your_test_db_name]
  6. GO
  7.  
  8. /****** Object:  Table [dbo].[Marks]    Script Date: 9/30/2015 1:11:14 PM ******/
  9. SET ANSI_NULLS ON
  10. GO
  11.  
  12. SET QUOTED_IDENTIFIER ON
  13. GO
  14.  
  15. SET ANSI_PADDING ON
  16. GO
  17.  
  18. CREATE TABLE [dbo].[Marks](
  19.     [stud_id] [INT] IDENTITY(1,1) NOT NULL,
  20.     [stud_name] [VARCHAR](50) NULL,
  21.  CONSTRAINT [PK_Marks] PRIMARY KEY CLUSTERED
  22. (
  23.     [stud_id] ASC
  24. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 75) ON [PRIMARY]
  25. ) ON [PRIMARY]
  26.  
  27. GO
  28.  
  29. SET ANSI_PADDING OFF
  30. GO
  31.  
  32. USE [master]
  33. GO
  34.  
  35. /****** Object:  Table [dbo].[student]    Script Date: 9/30/2015 1:11:23 PM ******/
  36. SET ANSI_NULLS ON
  37. GO
  38.  
  39. SET QUOTED_IDENTIFIER ON
  40. GO
  41.  
  42. SET ANSI_PADDING ON
  43. GO
  44.  
  45. CREATE TABLE [dbo].[student](
  46.     [stud_id] [INT] IDENTITY(1,1) NOT NULL,
  47.     [subject] [VARCHAR](30) NULL,
  48.     [marks] [INT] NULL,
  49.  CONSTRAINT [PK_student] PRIMARY KEY CLUSTERED
  50. (
  51.     [stud_id] ASC
  52. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 75) ON [PRIMARY]
  53. ) ON [PRIMARY]
  54.  
  55. GO
  56.  
  57. SET ANSI_PADDING OFF
  58. GO
  59.  
  60. ALTER TABLE [dbo].[student]  WITH CHECK ADD  CONSTRAINT [FK_student_Marks] FOREIGN KEY([stud_id])
  61. REFERENCES [dbo].[Marks] ([stud_id])
  62. GO
  63.  
  64. ALTER TABLE [dbo].[student] CHECK CONSTRAINT [FK_student_Marks]
  65. GO
  66.  
  67.  
  68.  
  69. DECLARE @n INT
  70.  
  71. SET @n = ABS(CHECKSUM(NewId())) % 14
  72. INSERT INTO dbo.Marks
  73. SELECT 'chetan'+CAST( @n AS VARCHAR(3))
  74. UNION ALL
  75. SELECT 'sanjay'+CAST(@n*2 AS VARCHAR(3))
  76. UNION ALL
  77. SELECT 'Mark'+CAST(@n*3 AS VARCHAR(3))
  78. UNION ALL
  79. SELECT 'Jose'+CAST(@n*4 AS VARCHAR(3))
  80.  
  81. GO 100000
  82.  
  83. INSERT INTO dbo.student
  84. SELECT 'Maths', ABS(CHECKSUM(NewId())) % 14*1
  85. UNION ALL
  86. SELECT 'Maths', ABS(CHECKSUM(NewId())) % 14*2
  87. UNION ALL
  88. SELECT 'Science', ABS(CHECKSUM(NewId())) % 14*3
  89. UNION ALL
  90. SELECT 'Science', ABS(CHECKSUM(NewId())) % 14*4
  91. UNION ALL
  92. SELECT 'geography', ABS(CHECKSUM(NewId())) % 14*5
  93. UNION ALL
  94. SELECT 'geography', ABS(CHECKSUM(NewId())) % 14*6
  95. GO 100000
  96.  
  97. -- run above multiple times
  98. SELECT * FROM dbo.Marks     -- 441036
  99. SELECT * FROM dbo.student   -- 440434 records
  100. /*
  101. delete from dbo.student
  102. where stud_id not in (select stud_id from dbo.Marks)
  103.  
  104. */
  105.  
  106.  
  107. dbcc dropcleanbuffers
  108. dbcc freeproccache
  109. SET statistics TIME, IO ON
  110. SELECT     stud_name AS [Student Name]
  111.         , [subject] AS [Subject]
  112.         , marks     AS [MAX Marks]
  113.     FROM dbo.Marks m
  114.  CROSS apply (SELECT   s.stud_id
  115.                      ,
  116.                      s.[subject]
  117.                      , s.marks
  118.                      , dense_rank() OVER (PARTITION BY s.[subject]  ORDER BY s.marks DESC) AS drnSub
  119.               FROM dbo.student s
  120.             ) s
  121.                  WHERE s.stud_id = m.stud_id
  122.                      AND s.drnSub  = 1
  123.                  OPTION (maxdop 1)
  124.  
  125.     SET statistics TIME, IO OFF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement