Is there a way in MySQL to do a single SQL statement that returns the selected rows along with the count of the result rows?
I can do this:
SELECT COUNT(*) FROM BigTable WHERE firstname LIKE 'a%';
Which gives me a single result row with the count (37,781). I can get the actual row data like this:
SELECT firstname FROM BigTable WHERE firstname LIKE 'a%';
which displays the actual 37,781 rows. But when I try to combine them, like this:
SELECT firstname, COUNT(*) FROM BigTable WHERE firstname LIKE 'a%';
I get a single row with the first row that matches the query, and the total count of records that matches the query.
What I'd like to see is two columns with 37,781 rows. The first column should contain the first name for each row and the second column should contain the number '37,781' for every row. Is there a way to write the query to accomplish this?
解决方案
You can use a CROSS JOIN. The subquery will get the count for all firstnames and then it will include this value in each row:
SELECT firstname, d.total
FROM BigTable
CROSS JOIN
(
SELECT COUNT(*) total
FROM BigTable
WHERE firstname LIKE 'a%'
) d
WHERE firstname LIKE 'a%';