型号:
一个SELECT
IF((SELECT COUNT(*) FROM dataset.table) > 0,
'Okay',
ERROR('No rows in the table'))
有survey
,每个都有一个survey_answers
和一个answer
question
属于question
。
示例:
category
具有Survey_answer
和survey_id
和answer_id
question_id
具有question
我将category_id
与Ruby on Rails
一起使用
使用Active Record
,并从调查开始,如何进行以下分组:
SQL
示例输出:
{ category => questions => answers }
我了解如何进行分组,但不了解如何使用{[
category_one_record,
[question_1,[answer_1, answer_2]],
[question_2,[answer_3, answer_4]],
category_two_record,
[question_3,[answer_5, answer_6]],
[question_4,[answer_7, answer_8]],
category_three_record,
...
]}
进行嵌套分组
答案 0 :(得分:1)
我相信您正在以非SQL方式考虑这一点。
SQL是表格形式的,返回此类信息时,通常会接受重复而不是看起来会生成嵌套的数据结构(例如可以使用JSON,XML等)。
您不 出现 ,不需要任何实际的聚集(GROUP BY
的用途)。相反,您指的是一种使相关记录彼此相邻的方法。
只需将数据联接然后排序。
您的原始帖子在表结构上不清楚,所以这是我的意思的一个非常粗糙的例子...
SELECT
survey.name AS survey_name,
category.name AS category_name,
question.text AS question_text,
answer.text AS answer_text
FROM
survey
INNER JOIN
question
ON question.survey_id = survey.id
INNER JOIN
category
ON category.id = question.category_id
INNER JOIN
answer
ON answer.question_id = question.id
ORDER BY
survey.name,
category.name,
question.text,
answer.text
这样的查询可能会返回一个如下所示的记录集...
survey_name | category_name | question_text | answer_text
-------------+---------------+---------------+-------------
survey_1 | category_1 | question_1 | answer_1
survey_1 | category_1 | question_1 | answer_2
survey_1 | category_1 | question_2 | answer_3
survey_1 | category_1 | question_2 | answer_4
survey_1 | category_2 | question_3 | answer_5
管状。不嵌套。
答案 1 :(得分:0)
如果您有自然连接可用,即使您不知道它如何工作,几乎也可以将表配对,就像这样:
select * from Survey_answer
natural join question
natural join category
where category_id = 1
如果没有此选项,则需要指定连接点,例如,如果是右侧,左侧或内部,则指定该连接点:
select * from Survey_answer
inner join question on Survey_answer.answer_id like question.answer_id
where Survey_answer.category_id = 1
您可以在此处了解更多信息:https://www.w3schools.com/sql/sql_join.asp