Redirect http to https does not work on subdir where another instance of WordPress installed

I think the directive in .htaccess is inherited by subfolder

The mod_rewrite directives in the root .htaccess file are not inherited by the /blog/.htaccess file (by default). You would need to specifically enable mod_rewrite inheritance, however, this probably adds unnecessary complexity.

I try to modify the .htaccess under /blogs/ by adding the above directive again. But that does not work. Why?

Even if mod_rewrite inheritance was enabled this would not work unaltered since it would redirect requests back to the document root. You would need to have modified the directive like you mentioned (by adding the /blogs subdirectory in the substitution), however, this would have broken the redirect for the WordPress site in the document root.

Instead, you need to repeat the HTTP to HTTPS redirect at the top of the /blog/.htaccess file. And since this is in a subdirectory and the subdirectory would seem to be part of the URL-path, it would be preferable to use the REQUEST_URI server variable instead to avoid having to hardcode the subdirectory in the directive (although the subdirectory is hardcoded in later directives anyway – this could be avoided – but I assume is created by WordPress).

(Aside: If you did enable mod_rewrite inheritance you would have needed to have changed the root .htaccess file to also use REQUEST_URI instead. However, this is unlikely to be the only thing you would have needed to change.)

For example:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

The REQUEST_URI server variable contains the full, root-relative (starting with a slash) URL-path.

The NC flag is superfluous here.