У меня три таблицы:
table1, table2, table3
Я пытаюсь получить общее количество строк из каждой таблицы, а также сумму столбца цены, например:
$r['count'] = total rows of all 3 tables combined; $r['price'] = sum of all prices added together in all 3 tables combined;
Вот мой запрос:
SELECT COUNT(*) AS `count`, SUM(price) AS `price` FROM `table1` UNION SELECT COUNT(*) AS `count`, SUM(price) AS `price` FROM `table2` UNION SELECT COUNT(*) AS `count`, SUM(price) AS `price` FROM `table3`
Когда я запускаю этот запрос, я получаю:
count price 19 5609399 8 946000 4 0
Это, в свою очередь, не работает, когда зацикливается на PHP, поскольку они являются 3 отдельными значениями, и я возвращаюсь только «count = 19 и price = 5609399». Они не все выходят вместе как count
или price
.
Любая помощь очень ценится 🙂
SELECT COUNT(*) AS `count`, SUM(price) AS `price` FROM ( SELECT price from `table1` UNION ALL SELECT price FROM `table2` UNION ALL SELECT price FROM `table3` ) X
или вообще объединить 3 пары значений
select sum(`count`) `count`, sum(`price`) `price` FROM ( SELECT COUNT(*) AS `count`, SUM(price) AS `price` FROM `table1` UNION ALL SELECT COUNT(*) AS `count`, SUM(price) AS `price` FROM `table2` UNION ALL SELECT COUNT(*) AS `count`, SUM(price) AS `price` FROM `table3` ) X
Как правило , используйте UNION ALL при объединении таблиц, а не UNION, поскольку UNION удаляет дубликаты, поэтому, если ваш счет / сумма была точно
1, 100 1, 100 2, 200
Результатом запроса объединения является
1, 100 # duplicate collapsed 2, 200
Вы можете сделать это:
SELECT count(1) AS `count`, SUM(price) AS `price` FROM (SELECT price FROM `table1` UNION ALL SELECT price FROM `table2` UNION ALL SELECT price FROM `table3`) AS `t`
Попробуйте это как шаблон для ваших таблиц –
SELECT (SELECT COUNT(*) FROM table1) + (SELECT COUNT(*) FROM table2), (SELECT SUM(price) FROM table1) + (SELECT SUM(price) FROM table2);