Reputation: 143
How can I shorten this query?
SET sql_mode = '';
SELECT t1.`id_number`,t1.`parents_id_number`,t1.`student_first_name`,
SUM(t1.`degree_value`) AS `values`,
(SELECT `user_key`
FROM data_users.account_info t2
WHERE t1.id_number = t2.id_number AND t1.parents_id_number = t2.parents_id_number
LIMIT 1) AS `user_key`,
(SELECT `first_name`
FROM data_users.account_info t2
WHERE t1.id_number = t2.id_number AND t1.parents_id_number = t2.parents_id_number
LIMIT 1) AS `first_name`,
(SELECT `last_name`
FROM data_users.account_info t2
WHERE t1.id_number = t2.id_number AND t1.parents_id_number = t2.parents_id_number
LIMIT 1) AS `last_name`,
(SELECT `about_me`
FROM data_users.account_info t2
WHERE t1.id_number = t2.id_number AND t1.parents_id_number = t2.parents_id_number
LIMIT 1) AS `about_me`
FROM `1479213957519` t1
WHERE t1.year_half = '1'
GROUP BY t1.`perfix`
ORDER BY `Values` DESC
LIMIT 6
Upvotes: 0
Views: 230
Reputation: 781974
Use a join instead of correlated subqueries.
SELECT t1.`id_number`,t1.`parents_id_number`,t1.`student_first_name`,
SUM(t1.`degree_value`) AS `values`,
t2.user_key, t2.first_name, t2.last_name, t2.about_me
FROM `1479213957519` t1
JOIN (SELECT *
FROM data_users.account_info
GROUP BY id_number, parents_id_number) t2
ON t1.id_number = t2.id_number AND t1.parents_id_number = t2.parents_id_number
WHERE t1.year_half = '1'
GROUP BY t1.`perfix`
ORDER BY `Values` DESC
LIMIT 6
If id_number
and parents_id_number
uniquely identifies a row in account_info
, you don't need the subquery, you can just join with the table itself.
SELECT t1.`id_number`,t1.`parents_id_number`,t1.`student_first_name`,
SUM(t1.`degree_value`) AS `values`,
t2.user_key, t2.first_name, t2.last_name, t2.about_me
FROM `1479213957519` t1
JOIN data_users.account_info t2
ON t1.id_number = t2.id_number AND t1.parents_id_number = t2.parents_id_number
WHERE t1.year_half = '1'
GROUP BY t1.`perfix`
ORDER BY `Values` DESC
LIMIT 6
Upvotes: 3