如何在没有WITH的情况下使用子查询?

von4xj4u  于 2022-09-18  发布在  Java
关注(0)|答案(1)|浏览(203)
  1. SELECT Agegroup, Attrition, Attrition / (SELECT Count(Attrition) FROM project1.employee) * 100 as Attrition_rate
  2. from (SELECT Agegroup, Count(*) as Attrition
  3. FROM(Select
  4. CASE
  5. WHEN age BETWEEN 0 AND 20 THEN '<20'
  6. WHEN age BETWEEN 20 AND 29 THEN '20-29'
  7. WHEN age BETWEEN 30 AND 39 THEN '30-40'
  8. WHEN age BETWEEN 40 AND 49 THEN '40-50'
  9. WHEN age BETWEEN 50 AND 100 THEN 'Greater than 50'
  10. ELSE 'not specified'
  11. END AS Agegroup
  12. FROM project1.employee
  13. Where Attrition = TRUE) AS T
  14. GROUP BY Agegroup) AS TT
  15. ORDER BY Agegroup;

这将返回零结果,但是当我在BigQuery中使用WITH子句时,它工作得很好。WITH子句在MySQL工作台中不起作用

r7s23pms

r7s23pms1#

MySQL和BigQuery都允许with子句。也许你的数据在这些系统中是不同的?请提供MySQL版本详细信息。

请考虑对over使用Windows函数,而不是嵌套查询。在BiqQuery中测试:

  1. With employee as
  2. (Select 19 age, true Attrition
  3. union all select 20,true
  4. union all select 50,true)
  5. SELECT Agegroup, Attrition, Attrition / sum(Attrition) over ()
  6. from (SELECT Agegroup, Count(*) as Attrition
  7. FROM(Select
  8. CASE
  9. WHEN age BETWEEN 0 AND 20 THEN '<20'
  10. WHEN age BETWEEN 20 AND 29 THEN '20-29'
  11. WHEN age BETWEEN 30 AND 39 THEN '30-40'
  12. WHEN age BETWEEN 40 AND 49 THEN '40-50'
  13. WHEN age BETWEEN 50 AND 100 THEN 'Greater than 50'
  14. ELSE 'not specified'
  15. END AS Agegroup
  16. FROM employee
  17. Where Attrition = TRUE) AS T
  18. GROUP BY Agegroup) AS TT
  19. ORDER BY Agegroup;
展开查看全部

相关问题