SQL / mySQL - 差异的平均值

时间:2016-10-09 15:09:28

标签: mysql

我是MySQL的新手,我试图在mySQL中找到每个4个孩子的家庭的第一次和最后一次出生的平均范围。 我有以下表格:

  • family(id,last_name)
  • 查找(family_id,child_id)
  • 孩子(ID,如first_name,year_of_birth)

我使用了以下查询,但只是想知道是否有人可以在mySQL中建议更简单的东西(不使用视图) - 如果可能的话?也许我没有想过一些公式/技巧?

SELECT
  AVG(span)
FROM (SELECT
  family_id,
  MAX(year_of_birth) - MIN(year_of_birth) span
FROM (family
INNER JOIN lookup
  ON family.id = lookup.family_id)
INNER JOIN children
  ON children.id = lookup.child_id
WHERE family_id IN (SELECT
  family_id
FROM (family
INNER JOIN lookup
  ON family.id = lookup.family_id)
INNER JOIN children
  ON children.id = lookup.child_id
GROUP BY family_id
HAVING COUNT(first_name) = 4)
GROUP BY family_id) AS derivedTable;

谢谢!

1 个答案:

答案 0 :(得分:1)

基于属性名称的解释,这应该足够了。 在生产中使用之前对其进行测试,我实际上在猜测名称的含义。

SELECT AVG(*)
FROM (
    SELECT MAX(year_of_birth) - MIN(year_of_birth)
    FROM lookup INNER JOIN children ON child_id = id
    GROUP BY family_id
    HAVING COUNT(*) = 4);