Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę liczyć i grupować kolumny oddzielnie za pomocą MySQL?

Wiem, że zmagasz się z wieloma rzeczami naraz, ale najlepsza odpowiedź rozwiązuje problem iegami szybko minął w drodze do zrobienia tego w Perlu:

Ludzie często robią znacznie więcej, niż potrzebują na poziomie aplikacji, ponieważ nigdy nie nauczą się robić właściwych rzeczy w bazie danych (takich jak inne pytanie na co lepiej odpowiedzieć odpowiednim zapytaniem SQL zamiast Perl). Ale na marginesie, wiele osób robi to, ponieważ nie są w stanie zmienić schematu. Heurystyki społeczne, takie jak odpowiednia aplikacja piwa, czasami wygładzają tę ścieżkę. Trochę pracy, aby przekonać ludzi z bazy danych, później się opłaci. I, na marginesie, „pełen stos programistów” często pomija jakiekolwiek wyrafinowane użycie baz danych.

Nie będę zmuszać nikogo do czytania Database in Depth C.J. , ale prawidłowe ustawienie schematu ma dużą wartość. Prawidłowo mam na myśli, że wymaga najmniej wysiłku i złożoności jego użytkowania. Sprawy powinny być łatwe i nie powinieneś ich zmieniać na poziomie aplikacji.

Chcesz policzyć, ile razy wybrano każdą odpowiedź. Liczenie to coś, co bazy danych robią bardzo dobrze, więc niech zrobi to baza danych.

Masz kilka pytań. Pytania mają różne odpowiedzi. Ankiety grupują zestawy pytań. Ludzie odpowiadają na ankiety, łącząc swoje odpowiedzi z pytaniami.

Oto prosty projekt schematu (i w końcu pojawi się jakiś facet od baz danych i powie mi, że nie zrobiłem tego dobrze, ale to w porządku). Sztuczka polega na tym, że nic nie musi mieć wielu nieużywanych kolumn. Wszystko jest w zgrabnym małym pakiecie ("relacja" w "relacyjnej bazie danych"), który można łatwo połączyć z innymi rzeczami za pomocą "kluczy obcych" (np. question_id do mapowania odpowiedzi na pytanie). Odpowiedzi, na przykład, będą miały wiele wierszy dla tego samego question_id .

Jeśli ktoś chce wejść z fantazyjnymi narzędziami do modelowania i zrobić zdjęcie, to sięgnij. Oznaczę to jako wiki społeczności.

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

Po prawidłowym odwzorowaniu i normalizacji (przeczytaj normalne formularze ), bardzo łatwo jest uzyskać żądane dane za pomocą SELECTów. Ideałem normalizacji jest po prostu nie powtarzanie informacji lub dopuszczenie ich do niespójnego stanu. W tych formach wiele rzeczy staje się znacznie prostszych do zrobienia.

A jeśli chcesz poćwiczyć takie rzeczy, Eksplorator danych Stackoverflow to zestaw rzeczywistych danych znormalizowany do tego, co tutaj przedstawiłem.

Teraz po prostu policz, ile razy answer_id pojawia się dla określonej kombinacji ankiety i pytania. Zręczne użycie GROUP BY wykonuje całą pracę za Ciebie. Nie musisz już przeszukiwać wierszy, patrząc na dziesiątki nieużywanych kolumn, próbując dowiedzieć się, jak je policzyć. Nie tylko to, ale możesz zrobić te rzeczy widoki , co oznacza, że ​​wpisujesz zapytanie raz, a baza danych udaje, że wyniki są tabelą. Następnie możesz po prostu zapytać o widok (więc wszystkie JOIN i podobnie są ukryte), co jest bardzo proste. Często pomijane są również procedury składowane.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak stworzyć dynamiczne menu z podmenu za pomocą php i mysql

  2. Wyszukiwanie pełnotekstowe MySQL w wielu kolumnach:zamieszanie w wynikach

  3. MySQL:DATE_ADD

  4. Wewnętrzne łączenie wielu z wieloma tabelami z filtrem w MySQL

  5. ModuleNotFoundError:Brak modułu o nazwie „mysql”