首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么有时我在列中得到最后一个变量,有时在列中得到所有不同的变量?

为什么有时我在列中得到最后一个变量,有时在列中得到所有不同的变量?
EN

Stack Overflow用户
提问于 2020-11-05 07:51:09
回答 1查看 29关注 0票数 1

我在做YELP数据集工作.这件事很难解释,但我会尽力的。我正试着把所有的餐馆都从一个城市开进来--这里是凤凰城。当我在下面运行查询时

代码语言:javascript
复制
SELECT b.city
,c.category
,b.name
,b.review_count
,h.hours
,CASE 
    WHEN h.hours LIKE 'Monday%'
        THEN 1
    WHEN h.hours LIKE 'Tuesday%'
        THEN 2
    WHEN h.hours LIKE 'Wednesday%'
        THEN 3
    WHEN h.hours LIKE 'Thursday%'
        THEN 4
    WHEN h.hours LIKE 'Friday%'
        THEN 5
    WHEN h.hours LIKE 'Saturday%'
        THEN 6
    WHEN h.hours LIKE 'Sunday%'
        THEN 7
    END AS day
,CASE 
    WHEN b.stars between 2
        AND 3
        THEN '2-3 stars'
    WHEN b.stars between 4
        AND 5
        THEN '4-5 stars'
    END AS star
FROM business b
INNER JOIN category c ON b.id = c.business_id
INNER JOIN hours h ON b.id = h.business_id
WHERE TRIM(c.category) = 'Restaurants'
    AND TRIM(b.city) = 'Phoenix'
    AND star IS NOT NULL

我得到的结果是:

代码语言:javascript
复制
+---------+-------------+----------------------------------------+--------------+-----------------------+-----+-----------+
| Phoenix | Restaurants | McDonald's                             |            8 | Monday|5:00-23:00     |   1 | 2-3 stars |
| Phoenix | Restaurants | McDonald's                             |            8 | Tuesday|5:00-23:00    |   2 | 2-3 stars |
| Phoenix | Restaurants | McDonald's                             |            8 | Friday|5:00-0:00      |   5 | 2-3 stars |
| Phoenix | Restaurants | McDonald's                             |            8 | Wednesday|5:00-23:00  |   3 | 2-3 stars |
| Phoenix | Restaurants | McDonald's                             |            8 | Thursday|5:00-23:00   |   4 | 2-3 stars |
| Phoenix | Restaurants | McDonald's                             |            8 | Sunday|5:00-23:00     |   7 | 2-3 stars |
| Phoenix | Restaurants | McDonald's                             |            8 | Saturday|5:00-0:00    |   6 | 2-3 stars |
| Phoenix | Restaurants | Charlie D's Catfish & Chicken          |            7 | Monday|11:00-18:00    |   1 | 4-5 stars |
| Phoenix | Restaurants | Charlie D's Catfish & Chicken          |            7 | Tuesday|11:00-18:00   |   2 | 4-5 stars |
| Phoenix | Restaurants | Charlie D's Catfish & Chicken          |            7 | Friday|11:00-18:00    |   5 | 4-5 stars |
| Phoenix | Restaurants | Charlie D's Catfish & Chicken          |            7 | Wednesday|11:00-18:00 |   3 | 4-5 stars |
| Phoenix | Restaurants | Charlie D's Catfish & Chicken          |            7 | Thursday|11:00-18:00  |   4 | 4-5 stars |
| Phoenix | Restaurants | Charlie D's Catfish & Chicken          |            7 | Sunday|13:00-16:00    |   7 | 4-5 stars |
| Phoenix | Restaurants | Charlie D's Catfish & Chicken          |            7 | Saturday|11:00-18:00  |   6 | 4-5 stars |
| Phoenix | Restaurants | Gallagher's                            |           60 | Monday|11:00-0:00     |   1 | 2-3 stars |
| Phoenix | Restaurants | Gallagher's                            |           60 | Tuesday|11:00-0:00    |   2 | 2-3 stars |
| Phoenix | Restaurants | Gallagher's                            |           60 | Friday|11:00-2:00     |   5 | 2-3 stars |
| Phoenix | Restaurants | Gallagher's                            |           60 | Wednesday|11:00-0:00  |   3 | 2-3 stars |
| Phoenix | Restaurants | Gallagher's                            |           60 | Thursday|11:00-2:00   |   4 | 2-3 stars |
| Phoenix | Restaurants | Gallagher's                            |           60 | Sunday|9:00-0:00      |   7 | 2-3 stars |
| Phoenix | Restaurants | Gallagher's                            |           60 | Saturday|9:00-2:00    |   6 | 2-3 stars |
| Phoenix | Restaurants | Bootleggers Modern American Smokehouse |          431 | Monday|11:00-22:00    |   1 | 4-5 stars |
| Phoenix | Restaurants | Bootleggers Modern American Smokehouse |          431 | Tuesday|11:00-22:00   |   2 | 4-5 stars |
| Phoenix | Restaurants | Bootleggers Modern American Smokehouse |          431 | Friday|11:00-22:00    |   5 | 4-5 stars |
| Phoenix | Restaurants | Bootleggers Modern American Smokehouse |          431 | Wednesday|11:00-22:00 |   3 | 4-5 stars |
+---------+-------------+----------------------------------------+--------------+-----------------------+-----+-----------+
(Output limit exceeded, 25 of 28 total rows shown)

因此,为了很好地看到开放时间,我将为每天创建新的列,下面的查询如下:

代码语言:javascript
复制
SELECT b.city
    ,c.category
    ,b.name
    ,b.review_count
    ,MAX(CASE 
            WHEN H.hours LIKE "%monday%"
                THEN TRIM(H.hours, '%MondayTuesWednesThursFriSatSun|%')
            END) AS monday_hours
    ,MAX(CASE 
            WHEN H.hours LIKE "%tuesday%"
                THEN TRIM(H.hours, '%MondayTuesWednesThursFriSatSun|%')
            END) AS tuesday_hours
    ,MAX(CASE 
            WHEN H.hours LIKE "%wednesday%"
                THEN TRIM(H.hours, '%MondayTuesWednesThursFriSatSun|%')
            END) AS wednesday_hours
    ,MAX(CASE 
            WHEN H.hours LIKE "%thursday%"
                THEN TRIM(H.hours, '%MondayTuesWednesThursFriSatSun|%')
            END) AS thursday_hours
    ,MAX(CASE 
            WHEN H.hours LIKE "%friday%"
                THEN TRIM(H.hours, '%MondayTuesWednesThursFriSatSun|%')
            END) AS friday_hours
    ,MAX(CASE 
            WHEN H.hours LIKE "%saturday%"
                THEN TRIM(H.hours, '%MondayTuesWednesThursFriSatSun|%')
            END) AS saturday_hours
    ,MAX(CASE 
            WHEN H.hours LIKE "%sunday%"
                THEN TRIM(H.hours, '%MondayTuesWednesThursFriSatSun|%')
            END) AS sunday_hours
    ,CASE 
        WHEN b.stars BETWEEN 2
                AND 3
            THEN '2-3 stars'
        WHEN b.stars BETWEEN 4
                AND 5
            THEN '4-5 stars'
        END AS star
FROM business b
LEFT JOIN category c ON b.id = c.business_id
LEFT JOIN hours h ON b.id = h.business_id
WHERE TRIM(c.category) = 'Restaurants'
    AND TRIM(b.city) = 'Phoenix'

我得到了:

代码语言:javascript
复制
+---------+-------------+-------------+--------------+--------------+---------------+-----------------+----------------+--------------+----------------+--------------+-----------+
| city    | category    | name        | review_count | monday_hours | tuesday_hours | wednesday_hours | thursday_hours | friday_hours | saturday_hours | sunday_hours | star      |
+---------+-------------+-------------+--------------+--------------+---------------+-----------------+----------------+--------------+----------------+--------------+-----------+
| Phoenix | Restaurants | Gallagher's |           60 | 5:00-23:00   | 5:00-23:00    | 5:00-23:00      | 5:00-23:00     | 5:00-0:00    | 9:00-2:00      | 9:00-0:00    | 2-3 stars |
+---------+-------------+-------------+--------------+--------------+---------------+-----------------+----------------+--------------+----------------+--------------+-----------+

看起来我很想,但在某个地方,我失去了所有的餐馆。列出的可能是数据集中的最后一个。因此,计算机并没有让他们全部返回,而是覆盖了结果。我应该更改哪些代码以获得所有餐厅的营业时间列表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-05 13:10:19

代码的问题是没有GROUP BY子句的情况下进行聚合,所以结果只有1行。

添加到查询中:

代码语言:javascript
复制
GROUP BY b.city, c.category, b.name, b.review_count, b.stars
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64693104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档