Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn SQL để đếm số lần các giá trị nhất định xảy ra trong nhiều hàng

Đúng. những gì bạn có sẽ hoạt động. (Bạn sẽ cần thêm bí danh trên bảng dẫn xuất, thông báo lỗi bạn nhận được phải tự giải thích. Dễ dàng sửa chữa, chỉ cần thêm dấu cách và ký tự c (hoặc bất kỳ tên nào bạn muốn) vào cuối truy vấn của bạn.

Có một cảnh báo về khả năng trùng lặp (VoterID, ElectionID) bộ giá trị.

Nếu bạn có một ràng buộc duy nhất đối với (VoterID, ElectionID), thì truy vấn của bạn sẽ hoạt động tốt.

Nếu bạn không có ràng buộc duy nhất (không cho phép (VoterID, ElectionId) ), thì có khả năng một cử tri có hai (2) hàng cho ElectionID 1 và không có hàng nào cho ElectionID 2 ... để cử tri đó được đưa vào tổng số. Và một cử tri đã bỏ phiếu hai lần trong ElectionID 1 và chỉ một lần trong ElectionID 2, cử tri đó sẽ bị loại khỏi số phiếu bầu.

Bao gồm từ khóa DISTINCT bên trong COUNT sẽ khắc phục được sự cố đó, ví dụ:

HAVING COUNT(DISTINCT ElectionID) = 2

Tôi muốn viết truy vấn theo cách khác, nhưng những gì bạn có sẽ hoạt động.

Để có được số lượng VoterID đã tham gia vào cả ElectionID 1 và ElectionID2, nhằm cải thiện hiệu suất, tôi tránh sử dụng chế độ xem nội tuyến (MySQL gọi nó là bảng dẫn xuất). Thay vào đó, tôi muốn truy vấn sử dụng một phép toán JOIN. Một cái gì đó như thế này:

SELECT COUNT(DISTINCT e1.voterID) AS NumVoters
  FROM elections e1
  JOIN elections e2
    ON e2.voterID = e1.voterID
 WHERE e1.electionID = 1
   AND e2.electionID = 2

Nếu bạn được đảm bảo rằng (voterID, ElectionID) là duy nhất, thì lựa chọn có thể đơn giản hơn:

SELECT COUNT(1) AS NumVoters
  FROM elections e1
  JOIN elections e2
    ON e2.voterID = e1.voterID
 WHERE e1.electionID = 1
   AND e2.electionID = 2


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vệ sinh và xác thực biểu mẫu php

  2. Sự khác biệt giữa LIKE và =trong MYSQL?

  3. SQL Không thể tạo bảng (errno:150)

  4. java - DataSource cho ứng dụng độc lập - không có máy chủ ứng dụng

  5. Lỗi # 2002 Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/Application/MAMP/tmp/mysql/mysql.sock' (2)