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

Làm cách nào để tôi có thể đếm và nhóm các cột riêng biệt với MySQL?

Tôi biết bạn đang đấu tranh với nhiều thứ cùng lúc, nhưng câu trả lời tốt nhất giải quyết được vấn đề đó là ikegami nhanh chóng trôi qua đang trên đường thực hiện nó ở Perl:

Mọi người thường làm nhiều hơn những gì họ cần ở cấp ứng dụng vì họ không bao giờ học cách làm những điều đúng đắn trong cơ sở dữ liệu (chẳng hạn như câu hỏi khác được trả lời tốt hơn bằng một truy vấn SQL thích hợp thay vì Perl). Tuy nhiên, ngoài ra, nhiều người làm điều đó vì họ không thể thay đổi lược đồ. Kinh nghiệm xã hội, chẳng hạn như ứng dụng thích hợp của bia, đôi khi làm suôn sẻ con đường đó. Một công việc nhỏ thuyết phục cơ sở dữ liệu mọi người sẽ thành công trong bội số sau đó. Và, như một điều khác, "nhà phát triển ngăn xếp đầy đủ" thường bỏ qua bất kỳ cách sử dụng cơ sở dữ liệu phức tạp nào.

Tôi sẽ không bắt bất cứ ai đọc Cơ sở dữ liệu chuyên sâu của C.J. Date , nhưng có rất nhiều giá trị trong việc làm đúng giản đồ. Đúng vậy, ý tôi là nó đòi hỏi ít nỗ lực và phức tạp nhất khi sử dụng. Mọi thứ sẽ trở nên dễ dàng và bạn không cần phải sắp xếp lại những thứ này ở cấp ứng dụng.

Bạn muốn đếm số lần mỗi câu trả lời được chọn. Đếm là điều mà cơ sở dữ liệu làm rất tốt, vì vậy hãy để cơ sở dữ liệu làm việc đó.

Bạn có một số câu hỏi. Các câu hỏi có nhiều câu trả lời khác nhau. Khảo sát nhóm các bộ câu hỏi với nhau. Mọi người trả lời các cuộc khảo sát bằng cách liên kết câu trả lời của họ với các câu hỏi.

Đây là một thiết kế giản đồ đơn giản (và một số anh chàng cơ sở dữ liệu cuối cùng sẽ xuất hiện và nói với tôi rằng tôi đã làm không đúng, nhưng điều đó ổn). Bí quyết là không có gì phải có nhiều cột không được sử dụng. Mọi thứ đi kèm trong một gói nhỏ gọn gàng ("quan hệ" trong "cơ sở dữ liệu quan hệ") dễ dàng kết nối với những thứ khác thông qua "khóa ngoại" (ví dụ:question_id để ánh xạ câu trả lời cho câu hỏi). Các câu trả lời, ví dụ, sẽ có nhiều hàng cho cùng một question_id .

Nếu ai đó muốn sử dụng các công cụ tạo mô hình ưa thích và tạo ra bức tranh, hãy bắt đầu. Tôi đánh dấu đây là wiki cộng đồng.

Table: Questions
   id
   text

Table: Answers
   id
   text
   question_id

Table: Surveys
   id 
   title

Table: SurveyQuestionSet
   id
   survey_id
   question_id   

Table: Respondent
   id
   text

Table: Response
   id
   respondent_id
   survey_id
   question_id
   answer_id

Sau khi được ánh xạ và chuẩn hóa đúng cách (đọc trên biểu mẫu bình thường ), rất dễ dàng để có được dữ liệu bạn muốn với các CHỌN. Lý tưởng của việc chuẩn hóa chỉ đơn giản là không lặp lại thông tin hoặc để thông tin đi vào trạng thái không nhất quán. Với những hình thức này, nhiều việc trở nên dễ dàng hơn nhiều.

Và, nếu bạn muốn thực hành những điều đó, hãy Stackoverflow Data Explorer là tập dữ liệu trong đời thực được chuẩn hóa theo những gì tôi đã trình bày ở đây.

Bây giờ, bạn chỉ cần đếm số lần answer_id hiển thị cho một sự kết hợp cụ thể giữa khảo sát và câu hỏi. Sử dụng nhẹ nhàng GROUP BY làm tất cả công việc cho bạn. Bạn không còn cần phải lặp đi lặp lại các hàng nhìn vào hàng chục cột không sử dụng để cố gắng tìm ra cách đếm chúng. Không chỉ vậy, bạn có thể làm cho những thứ này có lượt xem , có nghĩa là bạn viết truy vấn một lần và cơ sở dữ liệu giả sử kết quả của nó là một bảng. Sau đó, bạn có thể chỉ cần truy vấn chế độ xem (vì vậy tất cả JOIN s và tương tự là ẩn), điều này rất đơn giản. Các thủ tục được lưu trữ cũng thường bị bỏ qua.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP mySQL kiểm tra xem tên người dùng và mật khẩu có trong cơ sở dữ liệu không

  2. Ví dụ FROM_DAYS () - MySQL

  3. mysql chọn truy vấn trong một mảng được tuần tự hóa

  4. Cách tính phần trăm tăng trưởng theo tháng trong MySQL

  5. PHP:Lấy hình ảnh từ MySQL bằng PDO