Show the count based on some condition

懵懂的女人 提交于 2019-12-11 08:27:35

问题


I've asked a question some days back. Here is that link. Count() corresponding to max()

Now with the same set of tables (SQL Fiddle) I would like to check a different condition

If the first question was about a count related to the max of a status, this question is about showing the count based on the next status of every project.

Explanation

As you can see in the table user_approval,appr_prjt_id=1 has 3 different statuses namely 10,20 ,30. And the next status will be 40 (With every approval the status is increased by 10) and so on. So is it possible to show that there is a project whose status is waiting to be 40? Its count must only be shown for status corresponding to 40 in the output (not in the statuses 10,20,30,...etc)

Desired Output:

              10   |    20  |  30   |   40

location1     0    |    0   |   0   |   1

回答1:


Not sure what the next status will be 40 means. But assuming that the status is increased by 10 with every approval, the following should work:

SELECT * 
FROM user_projects pr
WHERE EXISTS (
  SELECT * FROM user_approval ex
  WHERE ex.appr_prjt_id = pr.proj_id
  AND ex.appr_status = 30
  )
AND NOT EXISTS (
  SELECT * FROM user_approval nx
  WHERE nx.appr_prjt_id = pr.proj_id
  AND nx.appr_status >= 40
  );



回答2:


You can get the counts for each of the next status requirements with a query that looks more like:

select
    sum(case when ua.appr_status = 10 then 1 else 0 end) as app_waiting_20,
    sum(case when ua.appr_status = 20 then 1 else 0 end) as app_waiting_30,
    sum(case when ua.appr_status = 30 then 1 else 0 end) as app_waiting_40
from
    user_approval ua;

The nice thing about this solution is only one table scan, and you can add all kinds of other counts/sums in the query result as well.




回答3:


select * from user_approval where appr_status
= (select max(appr_status) from user_approval where appr_status < 40);

SQL Fiddle : - http://www.sqlfiddle.com/#!11/f5243/10



来源:https://stackoverflow.com/questions/15741191/show-the-count-based-on-some-condition

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!