Intellipaat Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in SQL by (20.3k points)

I am using MySQL. Here is my schema:

Suppliers(sid: integer, sname: string, address string)

Parts(pid: integer, pname: string, color: string)

Catalog(sid: integer, pid: integer, cost: real)

(primary keys are bolded)

I am trying to write a query to select all parts that are made by at least two suppliers:

-- Find the pids of parts supplied by at least two different suppliers.

SELECT c1.pid                      -- select the pid

FROM Catalog AS c1                 -- from the Catalog table

WHERE c1.pid IN (                  -- where that pid is in the set:

    SELECT c2.pid                  -- of pids

    FROM Catalog AS c2             -- from catalog

    WHERE c2.pid = c1.pid AND COUNT(c2.sid) >= 2 -- where there are at least two corresponding sids

);

First off, am I even going about this the right way?

Secondly, I get this error:

1111 - Invalid use of group function

What am I doing wrong?

1 Answer

0 votes
by (40.7k points)

You have to use HAVING, not WHERE like this:

Try rewritting your subquery as:

(                  -- where that pid is in the set:

SELECT c2.pid                  -- of pids

FROM Catalog AS c2             -- from catalog

WHERE c2.pid = c1.pid

HAVING COUNT(c2.sid) >= 2)

Note: The WHERE clause is used to filter the rows selected in MySQL. Then MySQL groups the rows together and aggregates the numbers for the COUNT function. HAVING clause is similar to the WHERE clause, but it only happens after the COUNT value has been computed.

Related questions

0 votes
1 answer
0 votes
2 answers
0 votes
1 answer
asked Jan 6, 2021 in SQL by Appu (6.1k points)
0 votes
1 answer
asked Nov 19, 2020 in SQL by Vamsee Krishna (22.5k points)

31k questions

32.8k answers

501 comments

693 users

Browse Categories

...