Sequel: how to pass variable to select block?
up vote
0
down vote
favorite
I need to calculate users count inside of select query.
Here is my SQL snippet
SELECT count(id) FROM demo.users WHERE year_id = 'c4c62a9d-801f-4573-92a8-aa0a8589200a'
I use it inside of
CASE count(DISTINCT assigned_lessons.id)
WHEN 0 THEN 0
ELSE count(DISTINCT homework_results.id) :: float /
(
count(DISTINCT assigned_lessons.id) *
(SELECT count(id) FROM demo.users WHERE year_id = 'c4c62a9d-801f-4573-92a8-aa0a8589200a')
)
END AS completed_homework_rate
Here is my implementation on Sequel which works
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB['demo__users'.to_sym].select do
count(id)
end.where(year_id: 'c4c62a9d-801f-4573-92a8-aa0a8589200a')
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
but I need use something like this
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB["#schema__users".to_sym].select do
count(id)
end.where(year_id: year.id)
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
I need to use schema and year varibale inside of with query but Sequel say me
undefined method `id' for #<Sequel::SQL::Identifier @value=>:year>
or if I pass year id directly as a string it replaces schema variable in the wrong way
SELECT count("id") FROM "#<Sequel::SQL::Identifier:0x00007f8d36b553b8>"."users"
Simplified use case
DB[:curriculum_strands].select do
[
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB["#schema__users".to_sym].select do
count(id)
end.where(year_id: year.id)
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
]
end.left_join(...)
Is any way to pass variables to the select block in this case?
sequel sequel-gem
add a comment |
up vote
0
down vote
favorite
I need to calculate users count inside of select query.
Here is my SQL snippet
SELECT count(id) FROM demo.users WHERE year_id = 'c4c62a9d-801f-4573-92a8-aa0a8589200a'
I use it inside of
CASE count(DISTINCT assigned_lessons.id)
WHEN 0 THEN 0
ELSE count(DISTINCT homework_results.id) :: float /
(
count(DISTINCT assigned_lessons.id) *
(SELECT count(id) FROM demo.users WHERE year_id = 'c4c62a9d-801f-4573-92a8-aa0a8589200a')
)
END AS completed_homework_rate
Here is my implementation on Sequel which works
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB['demo__users'.to_sym].select do
count(id)
end.where(year_id: 'c4c62a9d-801f-4573-92a8-aa0a8589200a')
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
but I need use something like this
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB["#schema__users".to_sym].select do
count(id)
end.where(year_id: year.id)
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
I need to use schema and year varibale inside of with query but Sequel say me
undefined method `id' for #<Sequel::SQL::Identifier @value=>:year>
or if I pass year id directly as a string it replaces schema variable in the wrong way
SELECT count("id") FROM "#<Sequel::SQL::Identifier:0x00007f8d36b553b8>"."users"
Simplified use case
DB[:curriculum_strands].select do
[
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB["#schema__users".to_sym].select do
count(id)
end.where(year_id: year.id)
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
]
end.left_join(...)
Is any way to pass variables to the select block in this case?
sequel sequel-gem
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I need to calculate users count inside of select query.
Here is my SQL snippet
SELECT count(id) FROM demo.users WHERE year_id = 'c4c62a9d-801f-4573-92a8-aa0a8589200a'
I use it inside of
CASE count(DISTINCT assigned_lessons.id)
WHEN 0 THEN 0
ELSE count(DISTINCT homework_results.id) :: float /
(
count(DISTINCT assigned_lessons.id) *
(SELECT count(id) FROM demo.users WHERE year_id = 'c4c62a9d-801f-4573-92a8-aa0a8589200a')
)
END AS completed_homework_rate
Here is my implementation on Sequel which works
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB['demo__users'.to_sym].select do
count(id)
end.where(year_id: 'c4c62a9d-801f-4573-92a8-aa0a8589200a')
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
but I need use something like this
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB["#schema__users".to_sym].select do
count(id)
end.where(year_id: year.id)
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
I need to use schema and year varibale inside of with query but Sequel say me
undefined method `id' for #<Sequel::SQL::Identifier @value=>:year>
or if I pass year id directly as a string it replaces schema variable in the wrong way
SELECT count("id") FROM "#<Sequel::SQL::Identifier:0x00007f8d36b553b8>"."users"
Simplified use case
DB[:curriculum_strands].select do
[
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB["#schema__users".to_sym].select do
count(id)
end.where(year_id: year.id)
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
]
end.left_join(...)
Is any way to pass variables to the select block in this case?
sequel sequel-gem
I need to calculate users count inside of select query.
Here is my SQL snippet
SELECT count(id) FROM demo.users WHERE year_id = 'c4c62a9d-801f-4573-92a8-aa0a8589200a'
I use it inside of
CASE count(DISTINCT assigned_lessons.id)
WHEN 0 THEN 0
ELSE count(DISTINCT homework_results.id) :: float /
(
count(DISTINCT assigned_lessons.id) *
(SELECT count(id) FROM demo.users WHERE year_id = 'c4c62a9d-801f-4573-92a8-aa0a8589200a')
)
END AS completed_homework_rate
Here is my implementation on Sequel which works
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB['demo__users'.to_sym].select do
count(id)
end.where(year_id: 'c4c62a9d-801f-4573-92a8-aa0a8589200a')
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
but I need use something like this
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB["#schema__users".to_sym].select do
count(id)
end.where(year_id: year.id)
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
I need to use schema and year varibale inside of with query but Sequel say me
undefined method `id' for #<Sequel::SQL::Identifier @value=>:year>
or if I pass year id directly as a string it replaces schema variable in the wrong way
SELECT count("id") FROM "#<Sequel::SQL::Identifier:0x00007f8d36b553b8>"."users"
Simplified use case
DB[:curriculum_strands].select do
[
Sequel.case( 0 => 0 ,
Sequel.cast(count(:homework_results__id).distinct, :float) /
(
count(:assigned_lessons__id).distinct *
DB["#schema__users".to_sym].select do
count(id)
end.where(year_id: year.id)
),
count(:assigned_lessons__id).distinct,
).as(:completed_homework_rate),
]
end.left_join(...)
Is any way to pass variables to the select block in this case?
sequel sequel-gem
sequel sequel-gem
asked Nov 9 at 2:51
arturtr
887817
887817
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
I found that I don't need to use block it select.
Here is my solution
DB[:curriculum_strands].select(
completed_homework_rate.as(:completed_homework_rate),
).left_join(...)
private
def completed_homework_rate
Sequel.case( 0 => 0 ,
count_distinct(:homework_results__id).cast(Float) /
(count_distinct(:assigned_lessons__id) * users_count),
count_distinct(:assigned_lessons__id),
)
end
def users_count
DB["#schema__users".to_sym].select count(id) .where(year_id: year.id)
end
def count_distinct(column)
Sequel.function(:count, column).distinct
end
Ideas for improving this code are accepting... )
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
I found that I don't need to use block it select.
Here is my solution
DB[:curriculum_strands].select(
completed_homework_rate.as(:completed_homework_rate),
).left_join(...)
private
def completed_homework_rate
Sequel.case( 0 => 0 ,
count_distinct(:homework_results__id).cast(Float) /
(count_distinct(:assigned_lessons__id) * users_count),
count_distinct(:assigned_lessons__id),
)
end
def users_count
DB["#schema__users".to_sym].select count(id) .where(year_id: year.id)
end
def count_distinct(column)
Sequel.function(:count, column).distinct
end
Ideas for improving this code are accepting... )
add a comment |
up vote
0
down vote
I found that I don't need to use block it select.
Here is my solution
DB[:curriculum_strands].select(
completed_homework_rate.as(:completed_homework_rate),
).left_join(...)
private
def completed_homework_rate
Sequel.case( 0 => 0 ,
count_distinct(:homework_results__id).cast(Float) /
(count_distinct(:assigned_lessons__id) * users_count),
count_distinct(:assigned_lessons__id),
)
end
def users_count
DB["#schema__users".to_sym].select count(id) .where(year_id: year.id)
end
def count_distinct(column)
Sequel.function(:count, column).distinct
end
Ideas for improving this code are accepting... )
add a comment |
up vote
0
down vote
up vote
0
down vote
I found that I don't need to use block it select.
Here is my solution
DB[:curriculum_strands].select(
completed_homework_rate.as(:completed_homework_rate),
).left_join(...)
private
def completed_homework_rate
Sequel.case( 0 => 0 ,
count_distinct(:homework_results__id).cast(Float) /
(count_distinct(:assigned_lessons__id) * users_count),
count_distinct(:assigned_lessons__id),
)
end
def users_count
DB["#schema__users".to_sym].select count(id) .where(year_id: year.id)
end
def count_distinct(column)
Sequel.function(:count, column).distinct
end
Ideas for improving this code are accepting... )
I found that I don't need to use block it select.
Here is my solution
DB[:curriculum_strands].select(
completed_homework_rate.as(:completed_homework_rate),
).left_join(...)
private
def completed_homework_rate
Sequel.case( 0 => 0 ,
count_distinct(:homework_results__id).cast(Float) /
(count_distinct(:assigned_lessons__id) * users_count),
count_distinct(:assigned_lessons__id),
)
end
def users_count
DB["#schema__users".to_sym].select count(id) .where(year_id: year.id)
end
def count_distinct(column)
Sequel.function(:count, column).distinct
end
Ideas for improving this code are accepting... )
edited Nov 9 at 3:24
answered Nov 9 at 3:15
arturtr
887817
887817
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53219171%2fsequel-how-to-pass-variable-to-select-block%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown