1
我想創建一些由三列組成的SQL,然後獲取那些形成分組結果的行的COUNT
。如何按3列進行分組 - 並且 - 在SQL Server中獲取計數?
此外,按照最高的數量排序,第一。
表模式(簡化):
CREATE TABLE [dbo].[Foo]
(
[FooId] [int] IDENTITY(1,1) NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[Company] [varchar](20) NOT NULL,
[ProductFirstname] [varchar](100) NOT NULL,
[ProductLastname] [varchar](100) NOT NULL
)
樣本數據:
INSERT INTO Foo VALUES ('2001-10-01T07:07:07', 'Red', 'Yummy', 'GummyBear');
INSERT INTO Foo VALUES ('2002-10-01T07:07:07', 'Red', 'Yummy', 'GummyBear');
INSERT INTO Foo VALUES ('2003-10-01T07:07:07', 'Red', 'Bannana', 'Cake');
INSERT INTO Foo VALUES ('2003-11-11T07:07:07', 'Red', 'Green', 'Apples');
INSERT INTO Foo VALUES ('2004-10-01T07:07:07', 'Red', 'Yummy', 'GummyBear');
INSERT INTO Foo VALUES ('2005-10-01T07:07:07', 'Blue', 'Yummy', 'GummyBear');
INSERT INTO Foo VALUES ('2006-10-01T07:07:07', 'Blue', 'Yummy', 'GummyBear');
INSERT INTO Foo VALUES ('2007-10-01T07:07:07', 'Blue', 'Yummy', 'GummyBear');
INSERT INTO Foo VALUES ('2008-10-01T07:07:07', 'Red', 'Yummy', 'GummyBear');
INSERT INTO Foo VALUES ('2009-10-01T07:07:07', 'Blue', 'Green', 'Apples');
預期結果:
+-----------------------------------+
| Company | Name | Count |
+-----------------------------------+
| Red | Yummy GummyBear | 4 |
| Blue | Yummy GummyBear | 3 |
| Red | Bannana Cake | 1 |
| Red | Green Apples | 1 |
| Blue | Green Apples | 1 |
+-----------------------------------+
與此數據
所以,CreatedOn
基本上忽略。這是另一種用途的元數據。
哇 - 什麼是'ORDER BY 3 DESC'? –
@ Pure.Krome它在第3列按降序對結果進行排序。我已經這樣做了,以便按照您的示例中的順序來獲取列表。我也可以使用'ORDER BY COUNT(*)DESC'。您只能指定「數字」列。很明顯,如果你改變了列的順序,它仍然會根據第三列對結果進行排序,所以有時候你可能想明確地說**你想要排序的列(在這種情況下,通過使用COUNT(*) DESC'而不是'3 DESC',但爲簡單起見,我用它)。現在清楚嗎? –
如果你用'COUNT(*)DESC'取代'3',那會讓編譯器做第二個'COUNT(*)'還是隻用'SELECT'的結果呢?即。使用'3'會更快/更便宜,還是沒有差異(除了視覺效果)。 –