Databases Reference
In-Depth Information
COUNT(artist_name) is the same as COUNT(*) or COUNT(artist_id) . Of course, you can
use a column alias for the COUNT( ) column.
Let's try another example. Suppose you want to know how many tracks are on each
album, along with the artist and album name. Here's the query:
mysql> SELECT artist_name, album_name, COUNT(*) FROM
-> artist INNER JOIN album USING (artist_id)
-> INNER JOIN track USING (artist_id, album_id)
-> GROUP BY artist.artist_id, album.album_id;
+---------------------------+-------------------------------------+----------+
| artist_name | album_name | COUNT(*) |
+---------------------------+-------------------------------------+----------+
| New Order | Retro - John McCready FAN | 15 |
| New Order | Substance (Disc 2) | 12 |
| New Order | Retro - Miranda Sawyer POP | 14 |
| New Order | Retro - New Order / Bobby Gillespie | 15 |
| New Order | Power, Corruption & Lies | 8 |
| New Order | Substance 1987 (Disc 1) | 12 |
| New Order | Brotherhood | 10 |
| Nick Cave & The Bad Seeds | Let Love In | 10 |
| Miles Davis | Live Around The World | 11 |
| Miles Davis | In A Silent Way | 2 |
| The Rolling Stones | Exile On Main Street | 18 |
| The Stone Roses | Second Coming | 13 |
| Kylie Minogue | Light Years | 13 |
+---------------------------+-------------------------------------+----------+
13 rows in set (0.12 sec)
Before we discuss what's new, think about the general function of the query: it's an
INNER JOIN between artist , album , and track using the primary-key (identifier) col-
umns. Forgetting the aggregation for a moment, the output of this query is one row per
track.
The GROUP BY clause puts the rows together into clusters. In this query, we want the
tracks grouped together for each album by an artist. So, the GROUP BY clause uses
artist_id and album_id to do that. You can use the artist_id from any of the three
tables; artist.artist_id , album.artist_id , or track.artist_id are the same for this
purpose. It doesn't matter since the INNER JOIN makes sure they match anyway. The
same applies to album_id .
As in the previous example query, we're using the COUNT( ) function to tell us how many
rows are in each group. For example, you can see that COUNT(*) tells us that there are
15 tracks on New Order's Retro - John McReady FAN album. Again, it doesn't matter
what column or columns you count in the query: for example, COUNT(*) has the same
effect as COUNT(artist.artist_id) or COUNT(artist_name) .
Let's try another example. Say we want to know how many times we've listened to
tracks on each album. This query is a little trickier than the previous ones: we need to
think carefully about how to group the rows. We want rows for each album grouped
together—that is, we want to count the total number of times that any of the tracks on
 
Search WWH ::




Custom Search