Mysql
 sql >> база данни >  >> RDS >> Mysql

Как мога да преброя и групирам колони отделно с MySQL?

Знам, че се борите с много неща едновременно, но най-добрият отговор решава проблема, който ikegami бързо премина на път да го направи в Perl:

Хората често правят много повече, отколкото им е необходимо на ниво приложение, защото никога не се научават да правят правилните неща в базата данни (като вашия друг въпрос на което се отговаря по-добре чрез подходяща SQL заявка вместо Perl). Но, като настрана, много хора правят това, защото не могат да променят схемата. Социалната евристика, като например подходящото приложение на бирата, понякога изглажда този път. Малко работа за убеждаване на хората в базата данни се изплаща многократно по-късно. И, като друга страна, „разработчикът на пълен стек“ често пропуска всякакво сложно използване на бази данни.

Няма да карам никого да чете База данни в дълбочина на C.J. Date , но има голяма полза от правилната схема. С право имам предвид, че налага най-малко усилия и сложност при използването му. Нещата трябва да са лесни и не трябва да пренареждате тези неща на ниво приложение.

Искате да преброите колко пъти е избран всеки отговор. Преброяването е нещо, което базите данни правят много добре, така че оставете базата данни да го направи.

Имате някои въпроси. Въпросите имат различни отговори. Проучванията обединяват набори от въпроси. Хората отговарят на анкети, като свързват отговорите си с въпросите.

Ето един прост дизайн на схема (и някой човек от базата данни в крайна сметка ще се появи и ще ми каже, че не съм го направил както трябва, но това е добре). Номерът е, че нищо не трябва да има няколко колони, които не се използват. Всичко идва в спретнат малък пакет („връзката“ в „релационна база данни“), който лесно се свързва с другите неща чрез „външни ключове“ (например question_id за картографиране на отговор на въпроса). Отговорите, например, ще имат няколко реда за един и същ question_id .

Ако някой иска да влезе с изисканите инструменти за моделиране и да направи картината, направете го. Означавам това като уики на общността.

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

След като се начертаят и нормализират правилно (прочетете за нормални форми ), много е лесно да получите данните, които искате с SELECT. Идеалът за нормализиране е просто да не се повтаря информацията или да се позволи тя да изпадне в непоследователно състояние. В тези форми много неща стават много по-лесни за правене.

И ако искате да практикувате такива неща, Stackoverflow Data Explorer е набор от данни от реалния живот, нормализиран спрямо това, което съм представил тук.

Сега просто преброите колко пъти answer_id се показва за определена комбинация от анкета и въпрос. Елегантно използване на GROUP BY върши цялата работа вместо вас. Вече не е нужно да преглеждате редове, разглеждайки десетки неизползвани колони, опитвайки се да разберете как да ги преброите. Не само това, но можете да направите тези неща прегледи , което означава, че пишете заявката веднъж и базата данни се преструва, че резултатите й са таблица. След това можете просто да направите заявка за изгледа (така че всички JOIN s и по същия начин са скрити), което е много просто. Съхранените процедури също често се пренебрегват.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Неправилен ключов файл за таблица '/tmp/#sql_3c51_0.MYI' опитайте да го поправите

  2. как да се справяме с акценти и странни знаци в база данни?

  3. UTF-8:показва се правилно в базата данни, но не и в HTML, въпреки набора от знаци utf-8

  4. Проектиране на база данни с рецепти, която трябва да включва съставки, както и подрецепти

  5. Как да предоставим отдалечен достъп до MySQL за цяла подмрежа?