Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:基于条件的联接和计数_Mysql_Sql - Fatal编程技术网

Mysql SQL:基于条件的联接和计数

Mysql SQL:基于条件的联接和计数,mysql,sql,Mysql,Sql,我有两张桌子: CREATE TABLE Items (id INT, name VARCHAR(8)); CREATE TABLE Likes (item_id INT, usr VARCHAR(8), doeslike BOOLEAN); INSERT INTO Items VALUES (1, 'Pen'), (2, 'Pencil'), (3, 'Ruler'); INSERT INTO Likes VALUES (1, 'joe', TRUE ),

我有两张桌子:

CREATE TABLE Items (id INT, name VARCHAR(8));
CREATE TABLE Likes (item_id INT, usr VARCHAR(8), doeslike BOOLEAN);

INSERT INTO Items VALUES 
    (1, 'Pen'),
    (2, 'Pencil'),
    (3, 'Ruler');

INSERT INTO Likes VALUES
    (1, 'joe', TRUE ),
    (1, 'jill', TRUE ),
    (1, 'jack', FALSE),
    (2, 'jae', TRUE ),
    (2, 'jill', FALSE),
    (2, 'john', FALSE),
    (2, 'jer', TRUE ),
    (3, 'mill', TRUE ),
    (3, 'mack', FALSE),
    (3, 'moe', TRUE ),
    (3, 'gill', TRUE ),
    (3, 'zack', FALSE);
在这里拉小提琴:

我需要一个查询,列出每个项目以及喜欢和不喜欢每个项目的人数,如下所示:

ITEM    LIKES   DISLIKES
Pen     2       1
Pencil  2       2
Ruler   3       3

这样的东西可能会满足您的需要:

SELECT count('Likes.usr') as Likes, Items.name AS Product FROM Likes LEFT OUTER JOIN Items ON Items.id = Likes.item_id GROUP BY Product

致以最诚挚的问候。

像这样的东西可能会满足您的需要:

SELECT count('Likes.usr') as Likes, Items.name AS Product FROM Likes LEFT OUTER JOIN Items ON Items.id = Likes.item_id GROUP BY Product

致以最诚挚的问候。

您可以为此使用条件聚合。如果在select语句中使用SUMcondition,将获得该条件为真的次数。在您的桌子上这样使用:

SELECT i.name, SUM(l.doeslike = true) AS likes, SUM(l.doeslike = false) AS dislikes
FROM items i
JOIN likes l ON l.item_id = i.id
GROUP BY i.id;

这里有一个例子。如果某个项目存在时没有任何喜欢/不喜欢的地方,我还建议使用左联接。

您可以使用条件聚合。如果在select语句中使用SUMcondition,将获得该条件为真的次数。在您的桌子上这样使用:

SELECT i.name, SUM(l.doeslike = true) AS likes, SUM(l.doeslike = false) AS dislikes
FROM items i
JOIN likes l ON l.item_id = i.id
GROUP BY i.id;
这里有一个例子。如果某个项目可能存在而没有任何喜欢/不喜欢的地方,我还建议使用左连接

使用LEFTJOIN连接表,然后将布尔字段计数为 得到喜欢和不喜欢

使用LEFTJOIN连接表,然后将布尔字段计数为 得到喜欢和不喜欢

选择 I.名称为“项目” ,SUMCASE当L.doeslike=1时,则1或0结束为“LIKES” ,SUMCASE当L.doeslike=0时,则1或0结束为“不喜欢” 第I项 内部连接像L 在I.ID=L.ITEM\u ID上 按I.id分组 选择 I.名称为“项目” ,SUMCASE当L.doeslike=1时,则1或0结束为“LIKES” ,SUMCASE当L.doeslike=0时,则1或0结束为“不喜欢” 第I项 内部连接像L 在I.ID=L.ITEM\u ID上
GROUP BY I.I您的预期结果标尺->不喜欢=2而不是3中的值有误您是对的,看起来我真的需要SQL来为我计数;或者你不能把like=false=厌恶计算在内:-如果没有人投赞成票,那并不意味着每个人都投反对票:--您的预期结果标尺->不喜欢=2而不是3中的值有误您是对的,看起来我真的需要SQL来为我计数;或者你不能把like=false=厌恶计算在内:-如果没有人投赞成票,那并不意味着每个人都投反对票:--