Mysql e和颜色?表列表中的哪些列具有这些值?另外,正如@MillerKoijam所指出的,你能举一个数据集作为例子吗?这个问题有点模棱两可。从你的例子来看,女性、白色、绿色等都是价值观。然而,你说,你想得到不同颜色的“女性”。是否要将唯一的字段名称值及其计数作为

Mysql e和颜色?表列表中的哪些列具有这些值?另外,正如@MillerKoijam所指出的,你能举一个数据集作为例子吗?这个问题有点模棱两可。从你的例子来看,女性、白色、绿色等都是价值观。然而,你说,你想得到不同颜色的“女性”。是否要将唯一的字段名称值及其计数作为,mysql,sql,Mysql,Sql,e和颜色?表列表中的哪些列具有这些值?另外,正如@MillerKoijam所指出的,你能举一个数据集作为例子吗?这个问题有点模棱两可。从你的例子来看,女性、白色、绿色等都是价值观。然而,你说,你想得到不同颜色的“女性”。是否要将唯一的字段名称值及其计数作为输出?如果您能向我们提供表格数据,这将有助于我们找到解决方案。@rb512和所有颜色都是值,因为应用程序字段表都是问题,而应用程序字段值表基本上包含所有问题的所有答案。所以我需要找到所有女性的每种颜色的总数。你必须更好地定义你的需求。在你问题的



e和颜色?表列表中的哪些列具有这些值?另外,正如@MillerKoijam所指出的,你能举一个数据集作为例子吗?这个问题有点模棱两可。从你的例子来看,女性、白色、绿色等都是价值观。然而,你说,你想得到不同颜色的“女性”。是否要将唯一的字段名称值及其计数作为输出?如果您能向我们提供表格数据,这将有助于我们找到解决方案。@rb512和所有颜色都是值,因为应用程序字段表都是问题,而应用程序字段值表基本上包含所有问题的所有答案。所以我需要找到所有女性的每种颜色的总数。你必须更好地定义你的需求。在你问题的当前状态下,有太多的事情需要猜测。请更清楚一点。女性和颜色之间的关系是什么?表列表中的哪些列具有这些值?此外,正如@MillerKoijam所指出的,你能给出一个数据集作为例子吗?因为你想报告一个日历年,我个人认为我可能会将'2013-01-01'和'2013-12-31'之间的
f1.created_替换为
year(f1.created_at)=2013
,这显然适用于该年的所有项目,例如,“2013-12-31”可能是当天的开始或结束,这当然会对所使用的范围产生影响。如果该函数也用于“部分年份”,那么
BETWEEN
函数显然要好得多。抱歉,日期是不相关的,因为这将是一个动态查询,用户可以选择运行报告的日期。这将生成与我上面的查询相同的结果,这将生成正确的结果,但速度较慢。你的回答更简洁、更快。但我有一个问题,如果我删除行
和f1.field\u name!='女性“
,我仍然得到相同的结果。这一行是不需要的,还是我拥有的数据集看起来不需要这一行?@Catfish如果你删除这一行,你只需在计算女性申请者数量的结果中增加一行。那是唯一的区别。哦,明白了。谢谢你的帮助。因为你想要一个日历年的报告,我个人可能会将'2013-01-01'和'2013-12-31'之间的
f1.created\u替换为
year(f1.created\u at)=2013
,这显然适用于该年的所有项目,例如,“2013-12-31”可能是当天的开始或结束,这当然会对所使用的范围产生影响。如果该函数也用于“部分年份”,那么
BETWEEN
函数显然要好得多。抱歉,日期是不相关的,因为这将是一个动态查询,用户可以选择运行报告的日期。这将生成与我上面的查询相同的结果,这将生成正确的结果,但速度较慢。你的回答更简洁、更快。但我有一个问题,如果我删除行
和f1.field\u name!='女性“
,我仍然得到相同的结果。这一行是不需要的,还是我拥有的数据集看起来不需要这一行?@Catfish如果你删除这一行,你只需在计算女性申请者数量的结果中增加一行。那是唯一的区别。哦,明白了。谢谢你的帮助,这行不通。模板与应用程序本身无关,但模板包含一系列问题。每个应用程序都可以添加一个模板,在这种情况下,它会为所选模板的所有模板字段创建一个应用程序字段行。这不起作用。模板与应用程序本身无关,但模板包含一系列问题。每个应用程序都可以添加一个模板,在本例中,它为所选模板的所有模板字段创建一个应用程序字段行。
White - 2
Blue - 5
Green - 13
SELECT a.id AS aid, af.field_name AS aname, afv.field_value
FROM applications app, applicants a, application_fields af, application_fields_values afv, templates t, template_fields tf
WHERE a.application_id = app.id
AND af.application_id = app.id
AND afv.applicant_id = a.id
AND afv.application_field_id = af.id
#AND af.template_id = t.id
AND af.template_field_id = tf.id
AND t.id = tf.template_id
AND afv.created_at >= '2013-01-01' 
AND afv.created_at <= '2013-12-31' 
#AND af.field_name = 'Male' 
AND afv.field_value = 1
ORDER BY aid, aname
#GROUP BY aid, aNAME
#HAVING aname = 'Female';
aid |  aname   | field_value
    4  Female   1
    4  White    1
    5  Green    1
    5  Female   1
    6  Female   1
    6  White    1
    7  Blue     1
    7  Female   1
    8  Female   1
    8  Blue     1
    9  Male     1
    9  Green    1
applications:
id

application_fields:
id
application_id
field_name

applications_fields_values:
id
application_field_id
applicant_id
field_value

template:
id

template_fields:
id
template_id

applicant:
id
application_id
application_fields
id | application_id | field_name |template_id | template_field_id
1  |        1       |     blue   |      1     |         1
2  |        1       |     green  |      1     |         2
3  |        1       |     female |      1     |         3

application_fields_values
id | application_field_id | applicant_id | field_value
4  |            1         |        1     |      1     
5  |            2         |        1     |      0     
6  |            3         |        1     |      1

templates
id |    name    |
1  | mytemplate |

template_fields
id | template_id | field_name |
1  |       1     |   blue
2  |       1     |   green
3  |       1     |   female
SELECT af.field_name AS aname, sum(afv.field_value) AS totals
    FROM applications app, applicants a, application_fields af, application_fields_values afv, templates t, template_fields tf
    WHERE a.application_id = app.id
    AND af.application_id = app.id
    AND afv.applicant_id = a.id
    AND afv.application_field_id = af.id
    AND af.template_field_id = tf.id
    AND t.id = tf.template_id
    AND afv.created_at >= '2013-01-01' 
    AND afv.created_at <= '2013-12-31' 
    AND afv.field_value = 1
    AND a.id IN (
        SELECT 
            a2.id
        FROM applications app2, applicants a2, application_fields af2, application_fields_values afv2, templates t2, template_fields tf2
        WHERE af2.application_id = app2.id
        AND afv2.applicant_id = a2.id
        AND afv2.application_field_id = af2.id
        AND af2.template_field_id = tf2.id
        AND t2.id = tf2.template_id
        AND afv2.created_at >= '2013-01-01' 
        AND afv2.created_at <= '2013-12-31' 
        #AND af2.field_name = 'Male' 
        AND af2.field_name = 'Female'
        AND afv2.field_value = 1
    )
    GROUP BY aname;
aname | totals
Green    2
Black    27
Blue     5
SELECT 
    af.field_name AS aname, 
    count(afv.field_value) as totals
FROM 
    applications app, 
    applicants a, 
    application_fields af, 
    application_fields_values afv, 
    templates t, 
    template_fields tf
WHERE 
    a.application_id = app.id
    AND af.application_id = app.id
    AND afv.applicant_id = a.id
    AND afv.application_field_id = af.id
    #AND af.template_id = t.id
    AND af.template_field_id = tf.id
    AND t.id = tf.template_id
    AND afv.created_at >= '2013-01-01' 
    AND afv.created_at <= '2013-12-31' 
    #AND af.field_name = 'Male' 
    AND afv.field_value = 1
    AND aname = 'Female'
ORDER BY 
    aname
GROUP BY 
    aNAME
SELECT af.field_name AS aname, sum(afv.field_value) AS totals
FROM applications app, applicants a, application_fields af, application_fields_values afv, templates t, template_fields tf
WHERE a.application_id = app.id
AND af.application_id = app.id
AND afv.applicant_id = a.id
AND afv.application_field_id = af.id
AND af.template_field_id = tf.id
AND t.id = tf.template_id
AND afv.created_at >= '2013-01-01' 
AND afv.created_at <= '2013-12-31' 
AND afv.field_value = 1
AND EXISTS (
    SELECT 
        1
    FROM applications app2, applicants a2, application_fields af2, application_fields_values afv2, templates t2, template_fields tf2
    WHERE af2.application_id = app2.id
    AND afv2.applicant_id = a2.id
    AND afv2.application_field_id = af2.id
    AND af2.template_field_id = tf2.id
    AND t2.id = tf2.template_id
    AND afv2.created_at >= '2013-01-01' 
    AND afv2.created_at <= '2013-12-31' 
    #AND af2.field_name = 'Male' 
    AND af2.field_name = 'Female'
    AND afv2.field_value = 1
    AND a.id = a2.id    -- add this condition
)
GROUP BY aname;
SELECT f1.field_name, count(*) as total
  FROM application_fields f1
  JOIN applications_fields_values v1
    ON v1.application_field_id = f1.id
  JOIN applications_fields_values v2
    ON v1.applicant_id = v2.applicant_id
  JOIN applications_fields f2
    ON v2.application_field_id = f2.id
 WHERE v1.field_value = 1
   AND v2.field_value = 1
   AND f2.field_name = 'Female'
   AND f1.field_name != 'Female'
   AND f1.created_at BETWEEN '2013-01-01' AND '2013-12-31' 
 GROUP BY f1.field_name
applications:                   
id | template_id

application_fields_values:      
application_id | template_field_id | field_value

application fields: redundant

template information derived from template_fields