sql - 如何用if语句编写sql查询

标签 sql postgresql

我有两个表问题和答案。问题几乎没有答案。取决于问题中的“allow_multi_select”标志,我们可以为问题选择一个或几个答案。

答案有“首选”标志。

现在我想计算允许多选答案的问题,所有选择的答案都是首选。

例如,如果问题有三个答案,其中两个是首选,我只想在选择这两个时计算这个问题。

如何写这样的查询?

编辑:

我的模式:

CREATE TABLE survey_question (
  id BIGSERIAL PRIMARY KEY,
  sid VARCHAR(32) NOT NULL,
  active BOOLEAN NOT NULL DEFAULT TRUE,
  question VARCHAR(2048) NOT NULL,
  text_answer BOOLEAN NOT NULL DEFAULT FALSE,
  multi_answers BOOLEAN NOT NULL DEFAULT FALSE,
  "index" int4 NOT NULL,
  survey_sid VARCHAR(32) NOT NULL,
  text_answer_value TEXT,
  survey_definition_question_sid VARCHAR(32) NOT NULL,
  preferred_answers BOOLEAN NOT NULL,
  survey_definition_sid VARCHAR(32) NOT NULL,
);

CREATE TABLE survey_answer (
  id BIGSERIAL PRIMARY KEY,
  sid VARCHAR(32) NOT NULL,
  active BOOLEAN NOT NULL DEFAULT TRUE,
  answer VARCHAR(256) NOT NULL,
  "index" int4 NOT NULL,
  preferred BOOLEAN NOT NULL,
  survey_question_sid VARCHAR(32) NOT NULL,
  survey_definition_answer_sid VARCHAR(32) NOT NULL,
);

CREATE TABLE survey_question_answer_relation (
  id BIGSERIAL PRIMARY KEY,
  survey_question_id int8 NOT NULL,
  survey_answer_id int8 NOT NULL,
);

我没有第一次发布架构,因为有点复杂。

最佳答案

给定这个模式

create table question (
    question_id int,
    allow_multi_select boolean
);

create table answer (
    answer_id int,
    question_id int,
    preferred boolean,
    selected boolean
);

在此 SQL Fiddle 中创建,

select count(*) as total
from (
    select question_id
    from
        question q
        inner join
        answer a using (question_id)
    where allow_multi_select and preferred
    group by question_id
    having bool_and(selected)
) s

关于sql - 如何用if语句编写sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24783881/

相关文章:

regex - Postgres 正则表达式贪婪控制

ruby - 如何从 PgSQL DB 获取时间

sql - 如何在 PostgreSQL 的换行符上将一个值拆分为多行?

php - 在sql中查找最大平均值

mysql select * FROM table_one WHERE 表一和表二的columns_one和columns_two有相同的数据

mysql - 合并两个sql查询

java - 如何从按距离排序的JPA实体中获得结果?

sql - 如何参数化删除表的 T-SQL 存储过程?

postgresql - Haskell 持久不同步

sql - 列引用对于函数中的局部变量不明确