คำถามติดแท็ก group-by

GROUP BY: SQL Aggregation for Common Values

2
ทำไมสัญลักษณ์ตัวแทนในกลุ่มจำแนกตามคำสั่งไม่ทำงาน
ฉันพยายามทำให้คำสั่ง SQL ต่อไปนี้ทำงาน แต่ฉันได้รับข้อผิดพลาดทางไวยากรณ์: SELECT A.*, COUNT(B.foo) FROM TABLE1 A LEFT JOIN TABLE2 B ON A.PKey = B.FKey GROUP BY A.* ที่นี่ A เป็นตารางกว้างที่มี 40 คอลัมน์และฉันต้องการหลีกเลี่ยงการแสดงชื่อแต่ละคอลัมน์ในกลุ่มตามข้อถ้าเป็นไปได้ ฉันมีตารางดังกล่าวจำนวนมากซึ่งฉันต้องเรียกใช้แบบสอบถามที่คล้ายกันดังนั้นฉันจะต้องเขียนกระบวนงานที่เก็บไว้ วิธีที่ดีที่สุดในการเข้าถึงสิ่งนี้คืออะไร? ฉันใช้ MS SQL Server 2008

6
ทำไมเราใช้ Group by 1 และ Group by 1,2,3 ในการสืบค้น SQL?
ในแบบสอบถาม SQL เราจะใช้กลุ่มตามข้อเพื่อใช้ฟังก์ชั่นรวม แต่วัตถุประสงค์เบื้องหลังการใช้ค่าตัวเลขแทนชื่อคอลัมน์กับ Group by clause คืออะไร ตัวอย่างเช่น: จัดกลุ่มตาม 1
26 mysql  plsql  group-by  syntax 

2
ปรับปรุงประสิทธิภาพของ COUNT / GROUP-BY ในตาราง PostgresSQL ขนาดใหญ่?
ฉันใช้ PostgresSQL 9.2 และมีความสัมพันธ์ 12 คอลัมน์มีประมาณ 6,700,000 แถว มันมีโหนดในพื้นที่ 3 มิติแต่ละคนอ้างอิงผู้ใช้ (ผู้สร้างมัน) ในการสอบถามผู้ใช้รายใดที่สร้างจำนวนโหนดที่ฉันทำต่อไปนี้ (เพิ่มexplain analyzeสำหรับข้อมูลเพิ่มเติม): EXPLAIN ANALYZE SELECT user_id, count(user_id) FROM treenode WHERE project_id=1 GROUP BY user_id; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- HashAggregate (cost=253668.70..253669.07 rows=37 width=8) (actual time=1747.620..1747.623 rows=38 loops=1) -> Seq Scan on treenode (cost=0.00..220278.79 rows=6677983 width=8) (actual time=0.019..886.803 rows=6677983 loops=1) …

6
เลือกคอลัมน์ภายใน json_agg
ฉันมีคำถามเช่น: SELECT a.id, a.name, json_agg(b.*) as "item" FROM a JOIN b ON b.item_id = a.id GROUP BY a.id, a.name; ฉันจะเลือกคอลัมน์ในbดังนั้นฉันไม่ได้มีb.item_idในวัตถุ JSON ได้อย่างไร ฉันได้อ่านเกี่ยวกับROWแต่มันกลับวัตถุ JSON เช่น: {"f1": "Foo", "f2": "Bar"} ฉันจะต้องทำการแมปวัตถุ JSON อีกครั้งเมื่อมีการดึงข้อมูลเพื่อให้ตรงกับคีย์คอลัมน์ที่เหมาะสม ฉันต้องการหลีกเลี่ยงปัญหานั้นและเก็บชื่อคอลัมน์เดิมไว้

6
นับว่าคอลัมน์สองแถวขึ้นไปในแถวหนึ่งมีค่าเกินกว่าค่าใด [บาสเกตบอลคู่คู่สามเท่า]
ฉันเล่นเกมบาสเก็ตบอลที่อนุญาตให้ส่งออกสถิติเป็นไฟล์ฐานข้อมูลดังนั้นจึงสามารถคำนวณสถิติจากเกมที่ไม่ได้นำมาใช้ในเกมได้ จนถึงตอนนี้ฉันก็ไม่มีปัญหาในการคำนวณสถิติที่ฉันต้องการ แต่ตอนนี้ฉันพบปัญหา: การนับจำนวน double double และ / หรือ triple doubles ที่ผู้เล่นทำในช่วงฤดูกาลจากสถิติของเกม คำจำกัดความของ double double และ double double มีดังนี้: สองครั้งสองครั้ง: double-double ถูกกำหนดเป็นผลการทำงานที่ผู้เล่นสะสมตัวเลขสองหลักรวมในสองในห้าหมวดหมู่สถิติ - คะแนน, รีบาวน์, ช่วยเหลือ, ขโมยและช็อตที่ถูกบล็อก - ในเกม สามคู่: Triple-Double ถูกกำหนดให้เป็นการแสดงที่ผู้เล่นสะสมตัวเลขสองหลักรวมในสามในห้าหมวดหมู่สถิติ - คะแนน, รีบาวน์, ช่วยเหลือ, ขโมยและช็อตที่ถูกบล็อก - ในเกม Quadruple-double (เพิ่มเพื่อความกระจ่าง) quadruple-double ถูกกำหนดให้เป็นประสิทธิภาพที่ผู้เล่นสะสมตัวเลขสองหลักรวมในสี่ในห้าหมวดหมู่ทางสถิติ ได้แก่ คะแนนรีบาวน์การช่วยเหลือการขโมยและช็อตที่ถูกบล็อกในเกม ตาราง "PlayerGameStats" จะเก็บสถิติสำหรับแต่ละเกมที่ผู้เล่นเล่นและมีลักษณะดังนี้: CREATE TABLE …

1
ข้อผิดพลาด Postgres [คอลัมน์จะต้องปรากฏในกลุ่มตามข้อหรือใช้ในฟังก์ชั่นรวม] เมื่อใช้แบบสอบถามย่อย
ฉันมีสองตารางและemployee phonesพนักงานสามารถมีหมายเลขโทรศัพท์ 0 ถึง n ฉันต้องการแสดงชื่อพนักงานพร้อมหมายเลขโทรศัพท์ ฉันใช้แบบสอบถามด้านล่างซึ่งทำงานได้ดี SELECT empname,array_agg(phonenumber) AS phonenumbers FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid GROUP BY employee.empid ตารางพนักงานอาจมีแถวจำนวนมาก ฉันต้องการเรียกพนักงานเพียงบางคนในเวลาเดียวกัน ตัวอย่างเช่นฉันต้องการเรียกพนักงาน 3 คนด้วยหมายเลขโทรศัพท์ของพวกเขา ฉันพยายามเรียกใช้แบบสอบถามนี้ SELECT empname,array_agg(phonenumber) AS phonenumbers FROM (SELECT * FROM employee ORDER BY empname LIMIT 3 OFFSET 0) AS employee LEFT OUTER …

6
ค้นหาหมายเลขฟรี“ n” ติดต่อกันจากตาราง
ฉันมีตารางที่มีตัวเลขเช่นนี้ (สถานะเป็นได้ทั้งฟรีหรือถูกมอบหมาย) สถานะหมายเลข id_set ----------------------- 1 000001 ที่มอบหมาย 1 000002 ฟรี 1 000003 มอบหมาย 1 000004 ฟรี 1 000005 ฟรี 1 000006 มอบหมาย 1 000007 มอบหมาย 1 000008 ฟรี 1 000009 ฟรี 1 000010 ฟรี 1 000011 ได้รับมอบหมาย 1 000012 ได้รับมอบหมาย 1 000013 ได้รับมอบหมาย 1 000014 ฟรี 1 000015 ได้รับมอบหมาย …

2
วิธีการเลือกหลายคอลัมน์ แต่จัดกลุ่มตามกลุ่มเดียว?
ฉันมีปัญหาgroup byฉันต้องการเลือกหลายคอลัมน์ แต่จัดกลุ่มตามคอลัมน์เดียว แบบสอบถามด้านล่างเป็นสิ่งที่ฉันพยายาม แต่มันทำให้ฉันมีข้อผิดพลาด SELECT Rls.RoleName,Pro.[FirstName],Pro.[LastName],Count(UR.[RoleId]) as [Count] from [b.website-sitecore-core].[dbo].[aspnet_UsersInRoles] UR inner join [b.website-professional-au].[dbo].[Profile] Pro on UR.UserId = Pro.Id inner join [b.website-sitecore-core].[dbo].[aspnet_Roles] Rls on Rls.RoleId = UR.RoleId inner join [b.website-professional-au].[dbo].[Gender] Gn on gn.Id = pro.GenderId GROUP BY Rls.RoleName;

4
คิวรีช้าลงบนโต๊ะขนาดใหญ่ที่มี GROUP BY และ ORDER BY
ฉันมีตารางที่มี 7.2 ล้านสิ่งอันดับซึ่งมีลักษณะดังนี้: table public.methods column | type | attributes --------+-----------------------+---------------------------------------------------- id | integer | not null DEFAULT nextval('methodkey'::regclass) hash | character varying(32) | not null string | character varying | not null method | character varying | not null file | character varying | not null type | character …

7
การจัดกลุ่มหรือหน้าต่าง
ฉันมีสถานการณ์ที่ฉันคิดว่าสามารถแก้ไขได้โดยใช้ฟังก์ชั่นหน้าต่าง แต่ฉันไม่แน่ใจ ลองนึกภาพตารางต่อไปนี้ CREATE TABLE tmp ( date timestamp, id_type integer ) ; INSERT INTO tmp ( date, id_type ) VALUES ( '2017-01-10 07:19:21.0', 3 ), ( '2017-01-10 07:19:22.0', 3 ), ( '2017-01-10 07:19:23.1', 3 ), ( '2017-01-10 07:19:24.1', 3 ), ( '2017-01-10 07:19:25.0', 3 ), ( '2017-01-10 07:19:26.0', 5 …

1
เหตุใดกระแสรวมนี้จึงมีความจำเป็น
ลองดูคำถามนี้ มันค่อนข้างง่าย (ดูจุดสิ้นสุดของการโพสต์สำหรับคำจำกัดความของตารางและดัชนีและสคริปต์ที่ซ้ำกัน): SELECT MAX(Revision) FROM dbo.TheOneders WHERE Id = 1 AND 1 = (SELECT 1); หมายเหตุ: "AND 1 = (SELECT 1) เพียงเพื่อป้องกันไม่ให้มีการกำหนดพารามิเตอร์อัตโนมัติซึ่งฉันรู้สึกว่าสับสนปัญหา - จริง ๆ แล้วได้รับแผนเดียวกันโดยมีหรือไม่มีประโยคนั้นแม้ว่า และนี่คือแผน ( วางลิงก์แผน) : เนื่องจากมี "อันดับ 1" อยู่ที่นั่นฉันรู้สึกประหลาดใจที่เห็นผู้ดำเนินการรวมสตรีม ไม่จำเป็นสำหรับฉันเนื่องจากมีการรับประกันว่าจะมีแถวเดียวเท่านั้น เพื่อทดสอบทฤษฎีนั้นฉันลองใช้เคียวรีที่มีเหตุผลเชิงตรรกะนี้: SELECT MAX(Revision) FROM dbo.TheOneders WHERE Id = 1 GROUP BY Id; นี่คือแผนสำหรับแผนนั้น ( …

4
วิธีรับกลุ่มที่การนับเป็นศูนย์ได้อย่างไร
ฉันจะพยายามสร้างกราฟจากข้อมูลจากฐานข้อมูลเซิร์ฟเวอร์ SQL ของฉัน ฉันจะมีถนนทุกเส้นที่มีจำนวนผู้ใช้ที่อาศัยอยู่บนถนนเส้นนี้แม้จำนวนนั้นจะเป็นศูนย์ สำหรับสิ่งนี้ฉันได้ลองใช้แบบสอบถามนี้: Create table Streets( ID int IDENTITY primary key, Name varchar(100) ); create table users( ID int IDENTITY primary key, Username varchar(100), StreetID int references Streets(id) ); insert into streets values ('1st street'), ('2nd street'), ('3rd street'), ('4th street'), ('5th street'); insert into users values ('Pol', …

2
แบบสอบถาม SQL เข้าร่วมเพื่อแสดงแถวที่ไม่มีแถวในหนึ่งตาราง
ฉันกำลังพยายามทำให้การรายงานบางอย่างเสร็จสิ้นเพื่อบันทึกเวลาของพนักงาน เรามีสองตารางสำหรับคำถามนี้โดยเฉพาะ พนักงานมีการระบุไว้ในMembersตารางและในแต่ละวันพวกเขาป้อนรายการเวลาของงานที่พวกเขาทำและถูกเก็บไว้ในTime_Entryตาราง ตัวอย่างการตั้งค่าด้วย SQL Fiddle: http://sqlfiddle.com/#!3/e3806/7 ผลลัพธ์ที่ฉันจะให้เป็นตารางซึ่งแสดงให้เห็นทั้งหมดMembersในรายการคอลัมน์และจากนั้นจะแสดงชั่วโมงรวมของพวกเขาสำหรับวันที่สอบถามในคอลัมน์อื่น ๆ ปัญหาดูเหมือนว่าถ้าไม่มีแถวในTime_Entryตารางสำหรับสมาชิกเฉพาะตอนนี้มีแถวสำหรับสมาชิกนั้น ฉันได้ลองประเภทการเข้าร่วมหลายประเภท (ซ้าย, ขวา, ด้านใน, ด้านนอก, ด้านนอกเต็ม, ฯลฯ ) แต่ดูเหมือนว่าจะไม่มีสิ่งใดที่ฉันต้องการซึ่งจะเป็น (ตามตัวอย่างล่าสุดในซอฟแวร์ SQL Fiddle): /*** Desired End Result ***/ Member_ID | COUNTTime_Entry | TIMEENTRYDATE | SUMHOURS_ACTUAL | SUMHOURS_BILL ADavis | 0 | 11-10-2013 | 0 | 0 BTronton | 0 | 11-10-2013 …

1
SQL Spec ต้องการ GROUP BY ใน EXISTS () หรือไม่
Microsoft อนุญาตให้ใช้ไวยากรณ์นี้ในขณะนี้ SELECT * FROM ( VALUES (1) ) AS g(x) WHERE EXISTS ( SELECT * FROM ( VALUES (1),(1) ) AS t(x) WHERE g.x = t.x HAVING count(*) > 1 ); ขอให้สังเกตว่าไม่มีGROUP BYในEXISTSข้อเป็น ANSI SQL ที่ถูกต้อง หรือเป็นเพียงการเปิดเผยรายละเอียดการปฏิบัติ สำหรับการอ้างอิงไวยากรณ์เดียวกันนี้ไม่ได้รับอนุญาตใน PostgreSQL ข้อผิดพลาด: คอลัมน์ "tx" จะต้องปรากฏในกลุ่มตามข้อหรือจะใช้ในฟังก์ชั่นรวม แต่ไวยากรณ์นี้ได้รับอนุญาต .. SELECT * FROM ( …

2
เลือกแถวที่ตรงตามเงื่อนไขสำหรับกลุ่ม (ไม่มีตารางชั่วคราว)
มีตารางที่มี 3 คอลัมน์: ID category flag 1 A 1 2 A 0 3 A 0 4 B 0 5 C 0 ฉันต้องการเลือกแถวทั้งหมดที่มีflag = 1อย่างน้อยหนึ่งครั้งต่อหมวดหมู่ ผลลัพธ์ที่คาดหวัง: ID category flag 1 A 1 2 A 0 3 A 0 สามารถแก้ไขได้โดยใช้ตารางชั่วคราวเช่นนี้ select ID into #tempTable from someTable where flag = 1 select * …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.