我有两个SQL表。

用户

ID   |  USERNAME
001  |  Tom
002  |  Jane
003  |  Peter
004  |  Mariah


产品展示

ID   |   PR_NAME   |  USERID
01   |   Apple     |   002
02   |   Pear      |   001
03   |   Tomato    |   002
04   |   Apple     |   003
05   |   Tomato    |   001
06   |   Apple     |   001


如果我在表格/列表/应用程序中选择“ Apple”,我想查看谁购买了“ Apple”以及这些人购买了多少产品:

USERID | USERNAME | NUM_PRODUCTS_BOUGHT
001    |  Tom     |          3
002    |  Jane    |          2
003    |  Peter   |          1


我试过的是

SELECT
   USERS.ID, USERS.USERNAME,
   COUNT(PRODUCTS.PR_NAME) AS NUM_PRODUCTS_BOUGHT
FROM
   USERS
LEFT JOIN
   PRODUCTS ON PRODUCTS.USERID = USERS.ID
WHERE
   PRODUCTS.PR_NAME = "Apple"
GROUP BY
   USERS.ID


但是它给了我NUM_ALL(1)个错误的数字,例如

ID     | USERNAME | NUM_PRODUCTS_BOUGHT
001    |  Tom     |          1
002    |  Jane    |          1
003    |  Peter   |          1


我可以通过3种方式获得此结果,但无法获得想要的结果。

最佳答案

我认为您应该尝试使用hading子句。我还没有测试过,但是它应该可以工作:

SELECT
   USERS.ID, USERS.USERNAME,
   COUNT(PRODUCTS.PR_NAME) AS NUM_PRODUCTS_BOUGHT
FROM
   USERS
LEFT JOIN
   PRODUCTS ON PRODUCTS.USERID = USERS.ID
GROUP BY
   USERS.ID
HAVING
   SUM(CASE WHEN PRODUCTS.PR_NAME = "Apple" THEN 1 ELSE 0 END) > 0

关于mysql - SQL连接汇总数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23302675/

10-14 23:19