คำถามติดแท็ก count

COUNT: ฟังก์ชัน SQL รวมที่ใช้เพื่อนับจำนวนแถว

4
ความแตกต่างระหว่างจำนวนที่เลือก (*) และจำนวนที่เลือก (any_non_null_column) คืออะไร
ฉันดูเหมือนจะจำไว้ว่า (ใน Oracle) มีความแตกต่างระหว่างการเปล่งเสียงและselect count(*) from any_tableselect count(any_non_null_column) from any_table อะไรคือความแตกต่างระหว่างสองข้อความนี้ถ้ามี?
58 oracle  aggregate  count  null 

1
Postgres นับด้วยเงื่อนไขที่แตกต่างกันในแบบสอบถามเดียวกัน
แก้ไข Postgres 9.3 ฉันกำลังทำงานกับรายงานที่มีสคีมาต่อไปนี้: http://sqlfiddle.com/#!15/fd104/2 แบบสอบถามปัจจุบันทำงานได้ดีซึ่งมีลักษณะเช่นนี้: โดยทั่วไปจะเข้าร่วม 3 ตารางภายใน ฉันไม่ได้ทำแบบสอบถามนี้ แต่นักพัฒนาที่ทิ้งไว้และฉันต้องการแก้ไขแบบสอบถาม ในขณะที่คุณสามารถมองเห็นเพียงแค่นับแอพลิเคชันทั้งหมดขึ้นอยู่กับTotalApplication a.agent_idและคุณสามารถดูtotalapplicationคอลัมน์ในผลลัพธ์ได้ สิ่งที่ฉันต้องการคือการลบและเปลี่ยนtotalapplicationเป็นสองคอลัมน์ใหม่ ฉันต้องการเพิ่มcompletedsurveyและpartitalsurveyคอลัมน์ โดยพื้นฐานแล้วส่วนนี้จะกลายเป็น SELECT a.agent_id as agent_id, COUNT(a.id) as CompletedSurvey FROM forms a WHERE a.created_at >= '2015-08-01' AND a.created_at <= '2015-08-31' AND disposition = 'Completed Survey' GROUP BY a.agent_id ฉันเพิ่งเพิ่มAND disposition = 'Completed Survey'แต่ฉันต้องการคอลัมน์อื่นpartialsurveyที่มีข้อความค้นหาเดียวกันโดยมีcompletedsurveyความแตกต่างเพียงอย่างเดียวคือ AND disposition = …

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) …

3
วิธีการเลือกแถวเฉพาะถ้ามีคอลัมน์อยู่หรือทุกแถวถ้าไม่มีคอลัมน์
ฉันกำลังเขียนสคริปต์ที่ได้รับจำนวนแถวสำหรับตารางไม่กี่อย่างไรก็ตามสำหรับบางตารางฉันต้องการได้รับจำนวนแถวที่มีการตั้งค่าสถานะ (ในกรณีนี้ใช้งาน = 1) มีวิธีที่ฉันสามารถทำได้ในแบบสอบถามหรือไม่ เช่น: ตารางusersมีคอลัมน์ที่เรียกว่าใช้งานอยู่ ตารางclientsไม่มีคอลัมน์ที่เรียกว่าใช้งานอยู่ ฉันต้องการรับจำนวนผู้ใช้ที่มีการใช้งาน = 1 และเพิ่งได้รับจำนวนลูกค้า ก่อนที่คุณจะพูดว่า "แค่เขียนโค้ดยาก ๆ " นี่คือข้อความค้นหาที่อยู่ในสคริปต์ python ที่สามารถเรียกใช้บนฐานข้อมูลที่แตกต่างกันมากมายและฉันไม่มีทางรู้ว่าตารางสคริปต์ของฉันจะถูกเลือกและหากมีคอลัมน์ที่เรียกว่าactiveและ ฉันต้องการมีเพียงหนึ่งแบบสอบถามที่จะทำมันทั้งหมดแทนที่จะเป็นสองคนแยกต่างหากและอาศัย mysql เพื่อโยนข้อผิดพลาดดังนั้นฉันรู้ว่าจะใช้อีกคนหนึ่ง
23 mysql  select  count 

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

1
MySQL นับแถวจากตารางอื่นสำหรับแต่ละระเบียนในตาราง
SELECT student.StudentID, student.`Name`, COUNT(attendance.AttendanceID) AS Total FROM student LEFT JOIN attendance ON student.StudentID = attendance.StudentID ฉันกำลังพยายามนับแถวสุดท้าย แต่แทนที่จะนับผลลัพธ์ทั้งหมดและส่งกลับผลลัพธ์เดียว ฉันได้รับสิ่งที่ต้องการ เนื่องจากมีหลายระเบียนเนื่องจากมีสองรายการใน ID ผู้เข้าร่วมสำหรับ K1052280 ฉันต้องการนับและส่งคืนหมายเลข สิ่งที่ต้องการ
20 mysql  select  count 

3
ทำไม InnoDB ถึงไม่เก็บจำนวนแถว?
ทุกคนรู้ว่าในตารางที่ใช้ InnoDB เป็นเอ็นจินแบบสอบถามSELECT COUNT(*) FROM mytableจะไม่แม่นยำและช้ามากโดยเฉพาะเมื่อตารางมีขนาดใหญ่ขึ้นและมีการแทรก / ลบแถวอย่างต่อเนื่องในขณะที่ดำเนินการค้นหา ดังที่ฉันเข้าใจแล้ว InnoDB ไม่ได้จัดเก็บจำนวนแถวในตัวแปรภายในซึ่งเป็นสาเหตุของปัญหานี้ คำถามของฉันคือ: ทำไมจึงเป็นเช่นนี้? การเก็บข้อมูลดังกล่าวเป็นเรื่องยากไหม มันเป็นข้อมูลสำคัญที่ต้องรู้ในหลาย ๆ สถานการณ์ ความยากลำบากเพียงอย่างเดียวที่ฉันเห็นว่าการนับภายในนั้นจะถูกนำไปใช้คือเมื่อมีการทำธุรกรรมที่เกี่ยวข้อง: ถ้าการทำธุรกรรมนั้นไม่มีข้อผูกมัดคุณนับจำนวนแถวที่แทรกโดยมันหรือไม่? PS: ฉันไม่ใช่ผู้เชี่ยวชาญเกี่ยวกับ DBs ฉันเป็นแค่คนที่มี MySQL เป็นงานอดิเรกง่ายๆ ดังนั้นถ้าฉันถามอะไรที่โง่ ๆ
19 mysql  innodb  count 

3
PostgreSQL ใช้การนับ () เพื่อกำหนดเปอร์เซ็นต์ (ปัญหาการส่ง)
ฉันพยายามเรียกใช้แบบสอบถามต่อไปนี้เพื่อให้% ของแถวในpatientsตารางของฉันที่มีค่าrefinstคอลัมน์ ฉันได้รับผลลัพธ์เป็น 0 select (count (refinst) / (select count(*) from patients) * 100) as "Formula" from patients; ตารางมี 15556 แถวและselect count(refinst) from patientsบอกฉันว่า 1446 ของแถวนั้นมีค่าในrefinstคอลัมน์ การตอบสนองที่ฉันต้องการได้รับจากแบบสอบถามจะเท่ากับ 30.62 ( 1446/15556*100=30.62XXXXXปัดเศษเป็นทศนิยมสองตำแหน่ง) ฉันค่อนข้างแน่ใจว่ามีบางอย่างเกี่ยวกับประเภทข้อมูลของผลลัพธ์การนับ (จำนวนเต็มที่ฉันสมมติ) หากฉันหารจำนวนเต็มด้วยจำนวนเต็มและผลลัพธ์มีค่าน้อยกว่า 0 จะถูกปัดเศษเป็น 0 ที่ถูกต้องหรือไม่ หากเป็นกรณีนี้มีใครแสดงให้ฉันเห็นวิธีการนับผลลัพธ์เป็นจำนวนที่มีทศนิยม 2 ตำแหน่งเพื่อที่ผลลัพธ์จะถูกปัดเศษเป็นทศนิยม 2 ตำแหน่งเช่นกัน ฉันแน่ใจว่ามีวิธีที่ดีกว่าในการเขียนรหัสนี้มากกว่าหลายคำสั่งนับ ฉันกำลังมองหาวิธีที่มีประสิทธิภาพโปรเซสเซอร์มากขึ้นในการเขียนแบบสอบถามนี้โดยเฉพาะ
19 postgresql  count  cast 

5
MySQL นั้นเป็นโมฆะ / ไม่เป็นโมฆะ?
โปรดดูตารางนี้: mysql> desc s_p; +-------------------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | s_pid | int(10) unsigned | YES | MUL | NULL | | | sm_id | int(10) …
18 mysql  count 

2
MySQL - ความแตกต่างระหว่างการใช้ count (*) และ information_schema.tables สำหรับการนับแถว
ฉันต้องการวิธีที่รวดเร็วในการนับจำนวนแถวในตารางของฉันที่มีหลายล้านแถว ฉันพบโพสต์ " MySQL: วิธีที่เร็วที่สุดในการนับจำนวนแถว " ใน Stack Overflow ซึ่งดูเหมือนว่าจะช่วยแก้ปัญหาของฉันได้ Bayuahให้คำตอบนี้: SELECT table_rows "Rows Count" FROM information_schema.tables WHERE table_name="Table_Name" AND table_schema="Database_Name"; ซึ่งฉันชอบเพราะมันดูเหมือนการค้นหาแทนที่จะสแกนดังนั้นมันควรจะเร็ว แต่ฉันตัดสินใจทดสอบกับมัน SELECT COUNT(*) FROM table เพื่อดูว่ามีความแตกต่างด้านประสิทธิภาพมากน้อยเพียงใด น่าเสียดายที่ฉันได้รับคำตอบต่าง ๆดังที่แสดงด้านล่าง: คำถาม ทำไมคำตอบต่างกันประมาณ 2 ล้านแถว? ฉันเดาว่าการค้นหาที่ดำเนินการสแกนเต็มตารางนั้นเป็นจำนวนที่แม่นยำกว่า แต่มีวิธีที่ฉันสามารถรับหมายเลขที่ถูกต้องได้โดยไม่ต้องเรียกใช้แบบสอบถามที่ช้านี้หรือไม่ ฉันวิ่งANALYZE TABLE data_302ซึ่งเสร็จสมบูรณ์ภายใน 0.05 วินาที เมื่อฉันเรียกใช้แบบสอบถามอีกครั้งตอนนี้ฉันได้รับผลลัพธ์ที่ใกล้เคียงกับ 34384599 แถว แต่ก็ยังไม่เหมือนกันselect count(*)กับ 34906061 แถว วิเคราะห์ตารางที่ส่งคืนทันทีและดำเนินการในพื้นหลังหรือไม่ ฉันรู้สึกว่ามันคุ้มค่าที่จะกล่าวถึงนี่คือฐานข้อมูลทดสอบและไม่ได้ถูกเขียนถึงในขณะนี้ …
16 mysql  mysql-5.6  count 

1
ทำไมข้อความค้นหา sqlite นี้ช้าลงมากเมื่อฉันสร้างดัชนีคอลัมน์
ฉันมีฐานข้อมูล sqlite ที่มีสองตารางแต่ละแถวมี 50,000 แถวมีชื่อ (คน) ปลอม ฉันได้สร้างแบบสอบถามง่ายๆเพื่อค้นหาจำนวนชื่อที่มี (ชื่อที่กำหนด, ชื่อกลาง, นามสกุล) ที่ใช้ร่วมกันสำหรับทั้งสองตาราง: select count(*) from fakenames_uk inner join fakenames_usa on fakenames_uk.givenname=fakenames_usa.givenname and fakenames_uk.surname=fakenames_usa.surname and fakenames_uk.middleinitial=fakenames_usa.middleinitial; เมื่อไม่มีดัชนียกเว้นในคีย์หลัก (ไม่เกี่ยวข้องกับแบบสอบถามนี้) มันจะทำงานอย่างรวดเร็ว: [james@marlon Downloads] $ time sqlite3 generic_data_no_indexes.sqlite "select count(*) from fakenames_uk inner join fakenames_usa on fakenames_uk.givenname=fakenames_usa.givenname and fakenames_uk.surname=fakenames_usa.surname and fakenames_uk.middleinitial=fakenames_usa.middleinitial;" 131 real 0m0.115s …

2
ทำไมการนับ (*) ช้าเมื่ออธิบายคำตอบจะรู้ได้อย่างไร
คำค้นหานี้: select count(*) from planner_eventใช้เวลานานมากในการรัน - นานมากฉันยอมแพ้และฆ่ามันก่อนที่มันจะเสร็จ อย่างไรก็ตามเมื่อฉันเรียกใช้explain select count(*) from planner_eventฉันสามารถเห็นคอลัมน์ในผลลัพธ์ด้วยจำนวนแถว (14m) ทำไมการอธิบายถึงสามารถรับจำนวนแถวได้ทันที แต่การนับ (*) ใช้เวลานานในการรัน
14 mysql  count  explain 

1
คอลัมน์ sys.partition.rows มีความแม่นยำเพียงใด
มุมมองระบบsys.partitionsมีคอลัมน์ "แถว" ที่เป็นจำนวนแถวทั้งหมดในพาร์ติชันที่กำหนด สำหรับตารางที่ไม่ได้แบ่งพาร์ติชัน (หรือมีพาร์ติชันเดียวขึ้นอยู่กับวิธีที่คุณดู) คอลัมน์นี้ให้จำนวนแถวในตาราง SELECT COUNT(1) FROM TableNameฉันอยากรู้วิธีที่ถูกต้องคือคอลัมน์นี้และถ้าผมสามารถใช้มันแทน ฉันได้ทำการทดลองที่สร้างตารางและเพิ่มสองสามพันแถวลบสองสามร้อยเพิ่มอีกสองสามพัน ฯลฯ และจำนวนนั้นตายเสมอ อย่างไรก็ตามฉันมีตารางหนึ่งตารางที่มีประมาณ 700 ล้านแถวและดัชนีหลายรายการ แถวในsys.partitionsสำหรับดัชนีคลัสเตอร์นั้นตายไปแล้วอีกครั้งอย่างไรก็ตามดัชนีอื่น ๆ แสดงความแตกต่างเล็กน้อย (+ -20k) ไม่มีใครรู้วิธีคำนวณแถวนี้และถ้ามันถูกต้องตามที่ปรากฏ?


3
วิธีการนับหลายครั้งในหนึ่งแบบสอบถาม?
ฉันนับระเบียนด้วยคำค้นหาเช่น SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%something%' SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%another%' SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%word%' สำหรับการนับแต่ละครั้ง mysql จำเป็นต้องเดินตามตารางและนี่เป็นปัญหาใหญ่หากมีตารางยาวและข้อความค้นหาจำนวนมาก ฉันสงสัยว่ามีวิธีการนับทั้งหมดในหนึ่งแบบสอบถามหรือไม่ ในกรณีนี้เมื่อ mysql เดินผ่านแต่ละแถวมันจะประมวลผลการนับทั้งหมดและไม่จำเป็นต้องสแกนทั้งตารางซ้ำไปซ้ำมา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.